Amazon SageMaker ile Bir Makine Öğrenim Modeli Oluşturma, Eğitme ve Dağıtma

ÖĞRETİCİ

Giriş

Bu öğreticide XGBoost makine öğrenimi (ML) algoritmasını kullanarak bir ML modeli oluşturmak, eğitmek ve dağıtmak için Amazon SageMaker’ı nasıl kullanacağınızı öğreneceksiniz. Amazon SageMaker, her geliştiriciye ve veri bilimcisine ML modellerini hızlı bir şekilde oluşturma, eğitme ve dağıtma kabiliyeti sunan, tam olarak yönetilen bir hizmettir.

ML modellerinin kavramsallaştırmadan üretime alınması genellikle karmaşık ve zaman alıcıdır. Modeli eğitmek için büyük miktarda veriyi yönetmeniz, eğitim için en iyi algoritmayı seçmeniz, eğitim sırasında hesaplama kapasitesini yönetmeniz ve daha sonra modeli bir üretim ortamına yerleştirmeniz gerekmektedir. Amazon SageMaker, ML modelleri oluşturmayı ve dağıtmayı çok daha kolay hale getirerek bu karmaşıklığı azaltır. Siz mevcut geniş seçenek yelpazesinden doğru algoritmaları ve çerçeveleri seçtikten sonra SageMaker, modelinizi petabayt ölçeğinde eğitmek ve üretime dağıtmak için tüm temel altyapıyı yönetir.

Bu öğreticide bir bankada çalışan makine öğrenimi geliştiricisinin rolünü üstleneceksiniz. Müşterinin para yatırma sertifikasına (CD) kaydolup kaydolmayacağını tahmin etmek için bir makine öğrenimi modeli geliştirmeniz istenmiştir.

Bu öğreticide şunların nasıl yapılacağını öğreneceksiniz:

  1. Amazon SageMaker not defteri bulut sunucusu oluşturma
  2. Verileri hazırlama
  3. Verilerden öğrenmek için modeli eğitme
  4. Modeli Dağıtın
  5. ML modelinizin performansını değerlendirme

Bu model müşteri demografik bilgileri, pazarlama etkinliklerine verilen yanıtlar ve dış faktörler hakkında bilgileri içeren Banka Pazarlama Veri Kümesi üzerine eğitilecektir. Size kolaylık sağlamak amacıyla veriler etiketlenmiştir ve veri kümesindeki bir sütun müşterinin banka tarafından sunulan bir ürüne kayıtlı olup olmadığını tanımlamaktadır. Bu veri kümesinin bir sürümü Kaliforniya Üniversitesi, Irvine tarafından seçilen Makine Öğrenimi Deposunda halka açıktır.

Bu öğreticide oluşturulan ve kullanılan kaynaklar AWS Ücretsiz Kullanım için uygundur. Bu atölyenin maliyeti 1 USD’den azdır.

 AWS deneyimi

Başlangıç seviyesi

 Tamamlama süresi

10 dakika

 Tamamlama maliyeti

1 USD’den az. Ücretsiz Kullanım için uygun.

 Gerekenler:

  • AWS Hesabı
  • Önerilen tarayıcı: Chrome’un veya Firefox’un en son sürümü

[**]Son 24 saat içinde oluşturulan hesapların henüz bu öğretici için gerekli hizmetlere erişimi olmayabilir.

 Kullanılan hizmetler

 Son güncelleme:

23 Ağustos 2022

Başlamadan önce

Bu öğreticiyi tamamlamak için bir AWS hesabınızın olması gerekir. Halihazırda bir hesabınız yoksa AWS’ye kaydolun seçeneğini belirleyip yeni bir hesap oluşturun.

Zaten bir hesabınız var mı?
Hesabınızda oturum açın

1. Adım: Amazon SageMaker not defteri bulut sunucusu oluşturun

Bu adımda, verilerinizi indirmek ve işlemek için kullandığınız not defteri bulut sunucusunu oluşturursunuz. Oluşturma sürecinin bir parçası olarak Amazon SageMaker’ın Amazon Basit Depolama Hizmeti (Amazon S3) içindeki verilere erişmesine olanak tanıyan bir Kimlik ve Erişim Yönetimi (IAM) rolü de oluşturursunuz.


a. Amazon SageMaker konsolunda oturum açın ve sağ üst köşede tercih ettiğiniz AWS Bölgesini seçin. Bu öğreticide ABD Batı (Oregon) Bölgesi kullanılmaktadır.


b. Sol gezinme bölmesinde, Not defteri bulut sunucuları, ardından Not defteri bulut sunucusu oluştur’u seçin.


c. Not defteri bulut sunucusu oluştur sayfasında, Not defteri bulut sunucusu ayarı kutusunda, aşağıdaki alanları doldurun:

  • Not defteri bulut sunucusu için SageMaker-Öğretici yazın.
  • Not defteri bulut sunucusu tipi için ml.t2.medium ögesini seçin.
  • Esnek çıkarım için varsayılan hiçbiri seçimini olduğu gibi bırakın.
  • Platform tanımlayıcısı için varsayılan seçimi olduğu gibi bırakın.

d. İzinler ve şifreleme bölümünde, IAM rolü için Yeni bir rol oluştur’u seçin ve Bir IAM rolü oluştur iletişim kutusunda Herhangi bir S3 bucket ve Rol oluştur seçeneklerini belirleyin.

Not: Bunun yerine kullanmak istediğiniz bir bucket'ınız zaten varsa Belirli S3 bucket'lar seçeneğini belirleyin ve bucket adını belirtin.


Amazon SageMaker, AmazonSageMaker-ExecutionRole-*** rolünü oluşturur. 


e. Kalan seçeneklerin varsayılan ayarlarını olduğu gibi bırakın ve Not defteri bulut sunucusu oluştur seçeneğini belirleyin.

Not Defteri bulut sunucuları bölümünde yeni SageMaker-Öğretici not defteri bulut sunucusu Beklemede Durumu ile görüntülenir. Durum Hizmette olarak değiştiğinde not defteri hazırdır.

2. Adım: Verileri hazırlayın

Bu adımda, Amazon SageMaker not defteri bulut sunucunuzu makine öğrenimi modelinizi eğitmek üzere ihtiyaç duyduğunuz verileri önceden işlemek ve ardından verileri Amazon S3’e yüklemek için kullanacaksınız.


a. SageMaker-Öğretici not defteri bulut sunucusu durumunuz Hizmette olarak değiştikten sonra Jupyter’ı Aç’ı seçin.


b. Jupyter’da Yeni’yi ve ardından conda_python3’ü seçin.


c. Jupyter not defterinizdeki yeni kod hücresinde aşağıdaki kodu kopyalayıp yapıştırın ve Çalıştır’ı seçin.

Bu kod, gerekli kitaplıkları içe aktarır ve verileri hazırlamak ve ML modelini eğitip dağıtmak için ihtiyaç duyduğunuz ortam değişkenlerini tanımlar.

# import libraries
import boto3, re, sys, math, json, os, sagemaker, urllib.request
from sagemaker import get_execution_role
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from IPython.display import Image
from IPython.display import display
from time import gmtime, strftime
from sagemaker.predictor import csv_serializer

# Define IAM role
role = get_execution_role()
prefix = 'sagemaker/DEMO-xgboost-dm'
my_region = boto3.session.Session().region_name # set the region of the instance

# this line automatically looks for the XGBoost image URI and builds an XGBoost container.
xgboost_container = sagemaker.image_uris.retrieve("xgboost", my_region, "latest")

print("Success - the MySageMakerInstance is in the " + my_region + " region. You will use the " + xgboost_container + " container for your SageMaker endpoint.")

d. Verilerinizi depolamak için S3 bucket'ı oluşturun. Aşağıdaki kodu kopyalayıp bir sonraki kod hücresine yapıştırın ve Çalıştır’ı seçin.

Not: bucket_name s3-klasörünüzün-adı öğesini benzersiz bir S3 klasör adıyla değiştirdiğinizden emin olun. Kodu çalıştırdıktan sonra bir başarı mesajı almazsanız bucket adını değiştirin ve tekrar deneyin.

bucket_name = 'your-s3-bucket-name' # <--- CHANGE THIS VARIABLE TO A UNIQUE NAME FOR YOUR BUCKET
s3 = boto3.resource('s3')
try:
    if  my_region == 'us-east-1':
      s3.create_bucket(Bucket=bucket_name)
    else: 
      s3.create_bucket(Bucket=bucket_name, CreateBucketConfiguration={ 'LocationConstraint': my_region })
    print('S3 bucket created successfully')
except Exception as e:
    print('S3 error: ',e)

e. Verileri SageMaker bulut sunucunuza indirin ve bir veri çerçevesine yükleyin. Aşağıdaki kodu kopyalayıp bir sonraki kod hücresine yapıştırın ve Çalıştır’ı seçin.

try:
  urllib.request.urlretrieve ("https://d1.awsstatic.com/tmt/build-train-deploy-machine-learning-model-sagemaker/bank_clean.27f01fbbdf43271788427f3682996ae29ceca05d.csv", "bank_clean.csv")
  print('Success: downloaded bank_clean.csv.')
except Exception as e:
  print('Data load error: ',e)

try:
  model_data = pd.read_csv('./bank_clean.csv',index_col=0)
  print('Success: Data loaded into dataframe.')
except Exception as e:
    print('Data load error: ',e)

f. Verileri karıştırıp eğitim verilerine ve test verilerine ayırın. Aşağıdaki kodu kopyalayıp bir sonraki kod hücresine yapıştırın ve Çalıştır’ı seçin.

Eğitim verileri (müşterilerin %70’i) model eğitim döngüsü sırasında kullanılacaktır. Model parametrelerini yinelemeli olarak hassaslaştırmak için gradyan tabanlı optimizasyon kullanırsınız. Gradyan tabanlı optimizasyon model kaybı işlevinin gradyanını kullanarak model hatasını en aza indiren model parametre değerlerini bulmanın bir yoludur.

Test verileri (müşterilerin geri kalan %30’unun) modelin performansını değerlendirmek ve eğitilmiş modelin görünmeyen verilere ne kadar iyi genellendiğini ölçmek için kullanılmaktadır.

train_data, test_data = np.split(model_data.sample(frac=1, random_state=1729), [int(0.7 * len(model_data))])
print(train_data.shape, test_data.shape)

Adım 3: ML modelini eğitin

Bu adımda makine öğrenimi modelinizi eğitmek için eğitim veri kümenizi kullanacaksınız.


a. Jupyter not defterinizdeki yeni kod hücresinde aşağıdaki kodu kopyalayıp yapıştırın ve Çalıştır’ı seçin.

Bu kod, eğitim verilerinin üstbilgisini ve ilk sütununu yeniden biçimlendirir ve ardından verileri S3 bucket'tan yükler. Bu adım, Amazon SageMaker önceden oluşturulmuş XGBoost algoritmasını kullanmak için gereklidir.

pd.concat([train_data['y_yes'], train_data.drop(['y_no', 'y_yes'], axis=1)], axis=1).to_csv('train.csv', index=False, header=False)
boto3.Session().resource('s3').Bucket(bucket_name).Object(os.path.join(prefix, 'train/train.csv')).upload_file('train.csv')
s3_input_train = sagemaker.inputs.TrainingInput(s3_data='s3://{}/{}/train'.format(bucket_name, prefix), content_type='csv')

b. Amazon SageMaker oturumunu ayarlayın, XGBoost modelinin (tahminci) bir bulut sunucusunu oluşturun ve modelin hiperparametrelerini tanımlayın. Aşağıdaki kodu kopyalayıp bir sonraki kod hücresine yapıştırın ve Çalıştır’ı seçin.

sess = sagemaker.Session()
xgb = sagemaker.estimator.Estimator(xgboost_container,role, instance_count=1, instance_type='ml.m4.xlarge',output_path='s3://{}/{}/output'.format(bucket_name, prefix),sagemaker_session=sess)
xgb.set_hyperparameters(max_depth=5,eta=0.2,gamma=4,min_child_weight=6,subsample=0.8,silent=0,objective='binary:logistic',num_round=100)

c. Eğitim işine başlayın. Aşağıdaki kodu kopyalayıp bir sonraki kod hücresine yapıştırın ve Çalıştır’ı seçin.

Bu kod, modeli bir ml.m4.xlarge bulut sunucusunda gradyan optimizasyonu kullanarak eğitir. Birkaç dakika sonra Jupyter not defterinizde oluşturulan eğitim günlüklerini görmeniz gerekir.

xgb.fit({'train': s3_input_train})

4. Adım: Modeli dağıtın

Bu adımda eğitilmiş modeli bir uç noktaya dağıtacak, CSV verilerini yeniden biçimlendirip yükleyecek, daha sonra tahminler oluşturmak için modeli çalıştıracaksınız.


a. Jupyter not defterinizdeki yeni kod hücresinde aşağıdaki kodu kopyalayıp yapıştırın ve Çalıştır’ı seçin.

Bu kod, modeli bir sunucuda dağıtır ve erişebileceğiniz bir SageMaker uç noktası oluşturur. Bu adımın tamamlanması birkaç dakika sürebilir.

xgb_predictor = xgb.deploy(initial_instance_count=1,instance_type='ml.m4.xlarge')

b. Test verilerindeki müşterilerin banka ürünü için kayıtlı olup olmadıklarını tahmin etmek üzere aşağıdaki kodu bir sonraki kod hücresine kopyalayın ve Çalıştır’ı seçin.

from sagemaker.serializers import CSVSerializer

test_data_array = test_data.drop(['y_no', 'y_yes'], axis=1).values #load the data into an array
xgb_predictor.serializer = CSVSerializer() # set the serializer type
predictions = xgb_predictor.predict(test_data_array).decode('utf-8') # predict!
predictions_array = np.fromstring(predictions[1:], sep=',') # and turn the prediction into an array
print(predictions_array.shape)

5. Adım: Model performansını değerlendirin

Bu adımda makine öğrenimi modelinin performansını ve doğruluğunu değerlendirirsiniz.


Jupyter not defterinizdeki yeni kod hücresinde aşağıdaki kodu kopyalayıp yapıştırın ve Çalıştır’ı seçin.

Bu kod, karışıklık matrisi adı verilen bir tablodaki gerçek ve tahmin edilen değerleri karşılaştırır.

Tahmine dayanarak bir müşterinin test verilerinde müşterilerin %90’ı için doğru bir para yatırma sertifikasına kaydolacağını, kaydolma için %65 (278/429), kaydolmama içinse %90 (10.785/11.928) hassasiyetle tahmin ettiğiniz sonucunu çıkarabiliriz.

cm = pd.crosstab(index=test_data['y_yes'], columns=np.round(predictions_array), rownames=['Observed'], colnames=['Predicted'])
tn = cm.iloc[0,0]; fn = cm.iloc[1,0]; tp = cm.iloc[1,1]; fp = cm.iloc[0,1]; p = (tp+tn)/(tp+tn+fp+fn)*100
print("\n{0:<20}{1:<4.1f}%\n".format("Overall Classification Rate: ", p))
print("{0:<15}{1:<15}{2:>8}".format("Predicted", "No Purchase", "Purchase"))
print("Observed")
print("{0:<15}{1:<2.0f}% ({2:<}){3:>6.0f}% ({4:<})".format("No Purchase", tn/(tn+fn)*100,tn, fp/(tp+fp)*100, fp))
print("{0:<16}{1:<1.0f}% ({2:<}){3:>7.0f}% ({4:<}) \n".format("Purchase", fn/(tn+fn)*100,fn, tp/(tp+fp)*100, tp))

6. Adım: Temizleyin

Bu adımda, bu laboratuvarda kullanılan kaynakları sonlandıracaksınız.

Önemli: Aktif olarak kullanılmayan kaynakları sonlandırmak maliyeti azaltır ve en iyi uygulamalardan biridir. Kaynaklarınızı sonlandırmamak hesabınıza ücret olarak yansıtılır.


a. Uç noktanızı silme: Jupyter not defterinizde aşağıdaki kodu kopyalayıp yapıştırın ve Çalıştır seçeneğini belirleyin.

xgb_predictor.delete_endpoint(delete_endpoint_config=True)

b. Eğitim yapıtlarınızı ve S3 bucket'ınızı silme: Jupyter not defterinizde aşağıdaki kodu kopyalayıp yapıştırın ve Çalıştır seçeneğini belirleyin.

bucket_to_delete = boto3.resource('s3').Bucket(bucket_name)
bucket_to_delete.objects.all().delete()

c. SageMaker Not Defterinizi silme: SageMaker Not Defterinizi durdurun ve silin.

  1. SageMaker konsolu’nu açın.
  2. Not defterleri altında Not Defteri bulut sunucuları seçeneğini belirleyin.
  3. Bu öğretici için oluşturduğunuz not defteri bulut sunucusunu seçin, sonra Eylemler, Durdur seçeneğini belirleyin. Not defteri bulut sunucusunun durması birkaç dakika kadar sürer. Durum Durdurulduolarak değiştiğinde bir sonraki adıma geçin.
  4. Eylemler’i, ardından Sil’i seçin.
  5. Sil’i seçin.

Sonuç

Bir makine öğrenimi modeli hazırlamak, eğitmek, dağıtmak ve değerlendirmek için Amazon SageMaker’ı nasıl kullanacağınızı öğrendiniz. Amazon SageMaker, eğitim verilerinize hızlıca bağlanmanın yanı sıra uygulamanız için en iyi algoritma ile çerçeveyi seçmek üzere ihtiyacınız olan her şeyi sunarak ML modelleri oluşturmayı ve eğitim için hazırlamayı kolaylaştırır. Bunu yaparken de modelleri petabayt ölçeğinde eğitebilmeniz için temel altyapının tümünü yönetir.

Bu sayfa size yardımcı oldu mu?

Sonraki adımlar

Artık bir makine öğrenimi modeli hazırladığınıza, eğittiğinize, dağıttığınıza ve değerlendirdiğinize göre diğer Amazon SageMaker kaynaklarını keşfederek öğrendiklerinizi geliştirebilirsiniz.

Örnek ML not defterlerini keşfedin
Makine öğrenimi, derin öğrenme ve pekiştirmeli öğrenmenin Amazon SageMaker’da nasıl uygulanacağını gösteren örnek not defterlerini keşfedin.
Sonraki »
Amazon SageMaker Studio gezintisi yapın
Amazon SageMaker Studio gezintisi yapın.
Sonraki »
Amazon SageMaker Otomatik Pilot ile ML modellerini otomatik olarak nasıl oluşturacağınızı, eğiteceğinizi ve dağıtacağınızı öğrenin
Daha fazla bilgi edinmek istiyorsanız Amazon SageMaker Otomatik Pilot ile otomatik olarak bir makine öğrenimi modeli oluşturmak için 10 dakikalık öğreticiyi tamamlayın.
Sonraki »