إعداد نموذج Machine Learning والتدرب عليه ونشره

باستخدام Amazon SageMaker

في هذا البرنامج التعليمي، ستتعلم كيفية استخدام Amazon SageMaker لإنشاء نموذج تعلم الآلة (ML) والتدرب عليه ونشره. سنستخدم لوغاريتم XGBoost ML الشهير في هذا التمرين. Amazon SageMaker عبارة عن خدمة تعلُّم آلي نموذجية تتم إدارتها بالكامل لتمكين المطورين وعلماء البيانات من إنشاء نماذج تعلم الآلة (ML) والتدريب عليها ونشرها على نطاق واسع.

عادةً ما يكون أخذ نماذج ML من مرحلة وضع الإطار المفاهيمي إلى مرحلة الإنتاج أمرًا معقدًا ويستغرق وقتًا طويلاً. يجب عليك إدارة كميات كبيرة من البيانات لتدريب النموذج، واختيار أفضل لوغاريتم لتدريبه، وإدارة قدرة الحوسبة أثناء تدريبه، ثم نشر النموذج في بيئة إنتاج. يعمل Amazon SageMaker على تقليل درجة هذا التعقيد من خلال جعل الأمر أكثر سهولة لإنشاء نماذج ML ونشرها. بعد اختيار اللوغاريتمات والأُطر المناسبة من مجموعة واسعة من الخيارات المتاحة، فإن ذلك يقوم بإدارة جميع البنية التحتية الأساسية لتدريب نموذجك على نطاق البيتابايت، ونشره للإنتاج.

في هذا البرنامج التعليمي، ستتولى دور مطور تعلُم الآلة الذي يعمل في أحد البنوك. لقد طُلب منك تطوير نموذج لتعلم الآلة للتنبؤ بما إذا كان أحد العملاء سوف يسجل للحصول على شهادة إيداع (CD). سيتم تدريب النموذج على مجموعة بيانات تسويقية تحتوي على معلومات حول التركيبة السكانية للعميل، واستجاباته لفعاليات التسويق، وبعض العوامل الخارجية الأخرى.

تمت تسمية هذه البيانات لتيسير الرجوع إليها وتوفير الراحة لك، وهناك عمود في مجموعة البيانات يحدّد ما إذا كان العميل مسجلاً في أحد المنتجات التي يقدمها البنك أم لا. نسخة من مجموعة البيانات هذه متاحة للجمهور من مستودع التعلم الآلي (ML) برعاية جامعة كاليفورنيا، إيرفاين. يقوم هذا البرنامج التعليمي بتنفيذ نموذج تعلم الآلة الخاضع للإشراف نظرًا لأن البيانات مُصنّفة. (يحدث التعلُّم غير الخاضع للإشراف عندما لا يتم تصنيف مجموعات البيانات.)

في هذا البرنامج التعليمي، ستقوم بما يلي:

  1. إنشاء مثيل دفتر ملاحظات
  2. إعداد البيانات
  3. تدريب النموذج للتعلّم من البيانات
  4. نشر النموذج
  5. تقييم أداء نموذج تعلم الآلة (ML)
 
الموارد التي تم إنشاؤها واستخدامها في هذا البرنامج التعليمي مؤهلة لطبقة AWS المجانية. تذكر إكمال الخطوة 7 وإنهاء مواردك. إذا كان حسابك نشطًا بهذه الموارد لمدة تزيد عن شهرين، فسوف يتم فرض رسوم أقل من 0.50 USD على حسابك .
 

يتطلب هذا البرنامج التعليمي حساب AWS

الموارد التي تقوم بإنشائها في هذا البرنامج التعليمي مؤهلة للطبقة المجانية. 

معرفة المزيد حول الطبقة المجانية >>


الخطوة 1. الدخول إلى وحدة تحكم Amazon SageMaker

انتقل إلى وحدة تحكم Amazon SageMaker.


عند النقر هنا، تفتح وحدة الإدارة في AWS في نافذة جديدة، حتى يتسنى لك إبقاء هذا الدليل المفصل مفتوحًا. ابدأ بكتابة SageMaker في شريط البحث وحدد Amazon SageMaker لفتح وحدة التحكم في الخدمة.

build-train-deploy-machine-learning-model-sagemaker-1

(انقر للتكبير)


الخطوة 2. إنشاء مثيل دفتر ملاحظات Amazon SageMaker

في هذه الخطوة، ستقوم بإنشاء مثيل دفتر ملاحظات Amazon SageMaker. 


2 أ. من لوحة معلومات Amazon SageMaker، حدد مثيلات دفتر الملاحظات

build-train-deploy-machine-learning-model-sagemaker-2a

(انقر للتكبير)


2 ب. في صفحة إنشاء مثيل لدفتر الملاحظات، أدخل اسمًا في حقل اسم مثيل دفتر الملاحظات. يستخدم هذا البرنامج التعليمي MySageMakerInstance كاسم المثيل، ولكن يمكنك اختيار اسم مختلف، إذا كنت ترغب في ذلك

يتيح لك هذا البرنامج التعليمي الاحتفاظ بنوع مثيل دفتر الملاحظات ml.t2.medium.

لتمكين مثيل دفتر الملاحظات للوصول إلى البيانات وتحميلها بشكل آمن إلى Amazon S3، يجب تحديد دور IAM. في حقل دور IAM، اخترإنشاء دور جديد ليقوم Amazon SageMaker بإنشاء دور باستخدام الأذونات المطلوبة وتخصيصها لمثيلك. يمكنك بدلاً من ذلك اختيار دور IAM الحالي في حسابك لهذا الغرض.

build-train-deploy-machine-learning-model-sagemaker-2b

(انقر للتكبير)


2 ج. في مربع الحوار إنشاء دور IAM ، حدد أي حاويةS3. يسمح ذلك لمثيل Amazon SageMaker بالوصول إلى جميع حاويات S3 الموجودة في حسابك. لاحقًا في هذا البرنامج التعليمي، ستقوم بإنشاء حاوية S3 جديدة. ومع ذلك، إذا كان لديك حاوية ترغب في استخدامها بدلاً من ذلك، فحدد Specific S3 buckets وحدد اسم الحاوية.

اخترإنشاء دور.

build-train-deploy-machine-learning-model-sagemaker-2c

(انقر للتكبير)


2 د. لاحظ أن Amazon SageMaker قام بإنشاء دور يسمى AmazonSageMaker-ExecutionRole-*** من أجلك.

في هذا البرنامج التعليمي، سوف نستخدم القيم الافتراضية للحقول الأخرى. اخترإنشاء مثيل دفتر ملاحظات.

build-train-deploy-machine-learning-model-sagemaker-2d

(انقر للتكبير)


2 هـ. في صفحة مثيلات دفتر الملاحظات ، من المفترض أن ترى مثيل دفتر الملاحظات MySageMakerInstance الخاص بك الجديد في حالة معلقة.

يجب أن تنتقل حالة مثيل دفتر الملاحظات الخاص بك من الحالات المعلقة إلىفي الخدمة في أقل من دقيقتين.

build-train-deploy-machine-learning-model-sagemaker-2e

(انقر للتكبير)


الخطوة 3. إعداد البيانات

في هذه الخطوة، سوف تستخدم دفتر ملاحظات Amazon SageMaker الخاص بك لمعالجة البيانات التي تحتاجها لتدريب نموذج التعلم الآلي الخاص بك.


3 أ. في صفحة مثيلات دفتر الملاحظات، انتظر حتى ينتقل MySageMakerInstance من الحالة قيد التعليق إلى الحالة في الخدمة.

بعد أن تصبح الحالة في الخدمة، حدد MySageMakerInstance وافتحها باستخدام القائمة المنسدلة الإجراءات أو عن طريق اختيار Open Jupyter بجوار الحالة في الخدمة.

build-train-deploy-machine-learning-model-sagemaker-3a

(انقر للتكبير)

build-train-deploy-machine-learning-model-sagemaker-3a1

(انقر للتكبير)


3 ب. بعد فتح Jupyter، من علامة تبويب الملفات، اختر جديد، ثم اختر conda_python3

build-train-deploy-machine-learning-model-sagemaker-3b

(انقر للتكبير)


3 ج. لإعداد البيانات، وتدريب نموذج ML، ونشره، ستحتاج إلى استيراد بعض المكتبات وتحديد بعض متغيرات البيئة في بيئة دفتر ملاحظات Jupyter. انسخ التعليمات البرمجية التالية إلى خلية التعليمات البرمجية في المثيل الخاص بك وحدد تشغيل.

أثناء تشغيل التعليمات البرمجية، تظهر علامة * بين قوسين معقوفين كما هو موضح في لقطة الشاشة الأولى على اليمين. بعد بضع ثوانٍ، سيكتمل تنفيذ التعليمات البرمجية، وسيتم استبدال العلامة * بالرقم 1، وسوف ترى رسالة نجاح، كما هو موضح في لقطة الشاشة الثانية على اليمين. 

# 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'
containers = {'us-west-2': '433757028032.dkr.ecr.us-west-2.amazonaws.com/xgboost:latest',
              'us-east-1': '811284229777.dkr.ecr.us-east-1.amazonaws.com/xgboost:latest',
              'us-east-2': '825641698319.dkr.ecr.us-east-2.amazonaws.com/xgboost:latest',
              'eu-west-1': '685385470294.dkr.ecr.eu-west-1.amazonaws.com/xgboost:latest'} # each region has its XGBoost container
my_region = boto3.session.Session().region_name # set the region of the instance
print("Success - the MySageMakerInstance is in the " + my_region + " region. You will use the " + containers[my_region] + " container for your SageMaker endpoint.")
build-train-deploy-machine-learning-model-sagemaker-3c-1

(انقر للتكبير)

build-train-deploy-machine-learning-model-sagemaker-3c-2

(انقر للتكبير)


3د. في هذه الخطوة، تقوم بإنشاء حاوية S3 التي سوف تُخزّن بياناتك لهذا البرنامج التعليمي.

انسخ التعليمة البرمجية التالية إلى خلية التعليمة البرمجية التالية في دفتر الملاحظات الخاص بك وقم بتغيير اسم حاوية S3 لجعلها فريدة من نوعها. يجب أن تكون أسماء حاوية S3 فريدة عالميًا ولديها بعض القيود والحدود الأخرى.

حدد تشغيل. إذا لم تستلم رسالة نجاح، فقم بتغيير اسم الحاوية وحاول مرة أخرى.

 

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)
build-train-deploy-machine-learning-model-sagemaker-3d

(انقر للتكبير)


3 هـ. بعد ذلك، تحتاج إلى تنزيل البيانات إلى مثيل Amazon SageMaker وتحميلها في إطار بيانات. انسخ التعليمات البرمجية التالية وقم بتشغيلها:

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)
build-train-deploy-machine-learning-model-sagemaker-3e

(انقر للتكبير)


3 و. الآن، سنقوم بتبديل البيانات بطريقة عشوائية وتقسيمها إلى بيانات تدريب وبيانات اختبار.

سيتم استخدام بيانات التدريب (70% من العملاء) خلال حلقة تدريب النموذج. سوف نستخدم التحسين المستند إلى التدرج لتحسين معلمات النموذج بشكل متكرر. التحسين المستند إلى التدرج هو طريقة للعثور على قيم معلمات النموذج التي تعمل على تقليل الأخطاء الموجودة في النموذج إلى أدنى حد، وذلك باستخدام تدرج وظيفة فقدان النموذج.

سيتم استخدام بيانات الاختبار نسبة (30٪ المتبقية من العملاء) لتقييم أداء النموذج، وقياس مدى تعميم النموذج الذي تم التدريب عليه على البيانات غير الظاهرة.

انسخ التعليمات البرمجية التالية إلى خلية التعليمات البرمجية الجديدة وحددتشغيل لتبديل البيانات وتقسيمها بطريقة عشوائية:

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)
build-train-deploy-machine-learning-model-sagemaker-3f

(انقر للتكبير)


الخطوة 4. تدريب النموذج من البيانات

في هذه الخطوة، ستقوم بالتدريب على نموذج التعلم الآلي الخاص بك باستخدام مجموعة بيانات التدريب. 


4 أ. لاستخدام نموذج XGBoost من Amazon SageMaker الذي تم إنشاؤه مسبقًا، ستحتاج إلى إعادة تنسيق العنوان والعمود الأول لبيانات التدريب وتحميل البيانات من حاوية S3.

انسخ التعليمات البرمجية التالية إلى خلية التعليمات البرمجية الجديدة وحددتشغيل لإعادة تنسيق البيانات وتحميلها:

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.s3_input(s3_data='s3://{}/{}/train'.format(bucket_name, prefix), content_type='csv')

4 ب. بعد ذلك، تحتاج إلى إعداد جلسة Amazon SageMaker، وإنشاء مثيل لنموذج XGBoost (أداة التقدير)، وتحديد المعلمات المحددة مسبقاً للنموذج. انسخ التعليمات البرمجية التالية إلى خلية التعليمات البرمجية الجديدة وحددتشغيل:

sess = sagemaker.Session()
xgb = sagemaker.estimator.Estimator(containers[my_region],role, train_instance_count=1, train_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)

4 ج. عن طريق تحميل البيانات وإعداد أداة تقدير XGBoost ، قم بالتدريب على النموذج باستخدام التحسين المستند إلى التدرج على مثيلml.m4.xlargeمن خلال نسخ التعليمات البرمجية التالية إلى خلية التعليمات البرمجية التالية وتحديدتشغيل.

بعد بضع دقائق، يجب أن تبدأ برؤية سجلات التدريب التي يتم إنشاؤها.

xgb.fit({'train': s3_input_train})
build-train-deploy-machine-learning-model-sagemaker-4c

(انقر للتكبير)


الخطوة 5. نشر النموذج

في هذه الخطوة، ستقوم بنشر النموذج الذي تم التدريب عليه على نقطة النهاية، وإعادة التنسيق ثم تحميل بيانات CSV، ثم تشغيل النموذج لإنشاء تنبؤات.


5 أ. لنشر النموذج على خادم وإنشاء نقطة نهاية يمكنك الوصول إليها، انسخ التعليمات البرمجية التالية إلى خلية التعليمات البرمجية التالية وحدد تشغيل:

xgb_predictor = xgb.deploy(initial_instance_count=1,instance_type='ml.m4.xlarge')
build-train-deploy-machine-learning-model-sagemaker-5a

(انقر للتكبير)


5 ب. للتنبؤ بما إذا كان العملاء الموجودين في بيانات الاختبار مسجلين لمنتج بنكي أم لا، انسخ التعليمة البرمجية التالية إلى خلية التعليمة البرمجية التالية وحدد تشغيل:

test_data_array = test_data.drop(['y_no', 'y_yes'], axis=1).values #load the data into an array
xgb_predictor.content_type = 'text/csv' # set the data type for an inference
xgb_predictor.serializer = csv_serializer # 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)
build-train-deploy-machine-learning-model-sagemaker-5b

(انقر للتكبير)


الخطوة 6. تقييم أداء النموذج

في هذه الخطوة، ستقوم بتقييم أداء ودقة نموذج التعلم الآلي.


6 أ. انسخ والصق التعليمة البرمجية أدناه وحدد تشغيل لمقارنة القيم الفعلية مقابل القيم التي تم التنبؤ بها في جدول يسمىمصفوفة الارتباك .

بناءً على هذا التنبؤ، يمكننا أن نستنتج أنك تنبأت أن يسجل العميل للحصول على شهادة إيداع بدقة تصل لـ 90٪ من العملاء الموجودين في بيانات الاختبار، بدقة تصل لـ 65٪ (278/429) للمسجلين و 90٪ (10.785 / 11.928) لعدم التسجيل.

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))
build-train-deploy-machine-learning-model-sagemaker-6a

(انقر للتكبير)


الخطوة 7. إنهاء مواردك

في هذه الخطوة، ستنهي مواردك ذات الصلة بـ Amazon SageMaker.

مهم: يؤدي إنهاء الموارد التي لا ينشط استخدامها إلى خفض التكاليف ويعد من أفضل الممارسات. عدم إنهاء مواردك يحملك تكلفة.


7 أ. لحذف نقطة نهاية Amazon SageMaker والكائنات الموجودة في حاوية S3 الخاصة بك، قم بنسخ التعليمات البرمجية التالية ولصقها وتشغيلها:  

sagemaker.Session().delete_endpoint(xgb_predictor.endpoint)
bucket_to_delete = boto3.resource('s3').Bucket(bucket_name)
bucket_to_delete.objects.all().delete()
build-train-deploy-machine-learning-model-sagemaker-7a

(انقر للتكبير)


تهانينا!

لقد تعلمت كيفية استخدام Amazon SageMaker لإعداد نموذج تعلم الآلة والتدرب عليه ونشره وتقييمه. تعمل منصة Amazon SageMaker على تسهيل بناء نماذج التعلم الآلي (ML) من خلال توفير كل ما تحتاجه للاتصال سريعاً ببيانات التدريب الخاصة بك وتحديد أفضل خوارزمية وإطار عمل لتطبيقك، مع إدارة جميع البنية التحتية الأساسية، حتى تتمكن من تدريب النماذج على نطاق بيتابايت.


 

تعرّف على المزيد

يأتي Amazon SageMaker مع خوارزميات التعلم الآلي مسبقة الصنع والتي يمكن استخدامها في حالات الاستخدام المختلفة. تعرّف على المزيد حول استخدام الخوارزميات المدمجة التي تأتي مع Amazon SageMaker 

تعمّق في الأمر

يمكنك استخدام التعلم الآلي مع ضبط النموذج تلقائياً في Amazon SageMaker. يتيح لك ذلك ضبط المعلمات المحددة مسبقاً تلقائيًا في نماذجك لتحقيق أفضل نتيجة ممكنة. تحقق من وثائق ضبط النموذج تلقائيًا ومنشور المدونة هذا للتعمق في هذه الإمكانية. 

المشاهدة أثناء العمل

يحتوي Amazon SageMaker على عدد من نماذج دفاتر الملاحظات المتاحة التي تتناول العديد من حالات الاستخدام الشائعة الخاصة بالتعلم الآلي. تحقق منها على GitHub!


هل كان هذا البرنامج التعليمي مفيدًا؟