لمحة عن هذا الدرس التطبيقي حول الترميز
1. نظرة عامة
سوف تشرح في هذا التمرين المعملي سير العمل الكامل لتعلُّم الآلة على Google Cloud Platform. من بيئة Cloud AI Platform Notebooks، يمكنك نقل البيانات من مجموعة بيانات BigQuery العامة، وإنشاء نموذج XGBoost وتدريبه، ونشر النموذج في AI Platform لإجراء التوقّع.
المعلومات التي تطّلع عليها
وستتعرّف على كيفية:
- نقل بيانات مجموعة بيانات BigQuery وتحليلها في أوراق الملاحظات في AI Platform
- إنشاء نموذج XGBoost
- انشر نموذج XGBoost على AI Platform واحصل على توقّعات.
تبلغ التكلفة الإجمالية لتشغيل هذا التمرين على Google Cloud حوالي $1.
2. إعداد البيئة
ستحتاج إلى مشروع Google Cloud Platform مع تفعيل الفوترة لتشغيل هذا الدرس التطبيقي حول الترميز. لإنشاء مشروع، يُرجى اتّباع التعليمات هنا.
الخطوة 1: تفعيل Cloud AI Platform models API
انتقِل إلى قسم "نماذج منصة الذكاء الاصطناعي" (AI) في Cloud Console وانقر على "تفعيل" إذا لم يسبق لك تفعيله.
الخطوة 2: تفعيل Compute Engine API
انتقِل إلى Compute Engine واختَر تفعيل إذا لم يسبق لك تفعيله. ستحتاج إلى هذا لإنشاء مثيل دفتر الملاحظات.
الخطوة 3: إنشاء مثيل من AI Platform Notebook
انتقِل إلى قسم AI Platform Notebooks في Cloud Console وانقر على New Instance (مثيل جديد). بعد ذلك، اختَر أحدث نوع من مثيل Python:
استخدِم الخيارات التلقائية، ثم انقر على إنشاء. بعد إنشاء المثيل، اختَر فتح JupyterLab:
الخطوة 4: تثبيت XGBoost
بعد فتح مثيل JupyterLab، ستحتاج إلى إضافة حزمة XGBoost.
لإجراء ذلك، حدد تطبيق Terminal من مشغِّل التطبيقات:
بعد ذلك، شغِّل ما يلي لتثبيت أحدث إصدار من XGBoost متوافق مع AI Platform:
pip3 install xgboost==0.82
بعد اكتمال ذلك، افتح مثيل Python 3 Notebook من مشغّل التطبيقات. أنت الآن جاهز للبدء في دفتر ملاحظاتك!
الخطوة 5: استيراد حِزم Python
في الخلية الأولى من دفتر الملاحظات، أضف عمليات الاستيراد التالية وشغِّل الخلية. يمكنك تشغيله بالضغط على زر السهم المتّجه لليمين في القائمة العلوية أو الضغط على مفتاح الأوامر:
import pandas as pd
import xgboost as xgb
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.utils import shuffle
from google.cloud import bigquery
3. استكشاف مجموعة بيانات BigQuery
أتاحت أداة BigQuery العديد من مجموعات البيانات للجميع من أجل استكشافك. سنستخدم مجموعة بيانات المواليد في هذا التمرين المعملي. يحتوي هذا على بيانات حول كل ولادة تقريبًا في الولايات المتحدة على مدار فترة زمنية تبلغ 40 عامًا، بما في ذلك وزن الطفل عند الولادة، ومعلومات ديموغرافية عن والدي الطفل. سنستخدم مجموعة فرعية من الخصائص للتنبؤ بوزن الطفل عند الولادة.
الخطوة 1: تنزيل بيانات BigQuery إلى ورقة الملاحظات
سنستخدم مكتبة برامج Python لأداة BigQuery لتنزيل البيانات في Pandas DataFrame. تبلغ مجموعة البيانات الأصلية 21 غيغابايت وتحتوي على 123 مليون صف. لتبسيط الأمور، سنستخدم 10000 صف فقط من مجموعة البيانات.
قم بإنشاء الاستعلام ومعاينة DataFrame الناتج بالتعليمة البرمجية التالية. نحصل هنا على 4 خصائص من مجموعة البيانات الأصلية، إلى جانب وزن الطفل (الشيء الذي سيتوقعه نموذجنا). يعود تاريخ مجموعة البيانات إلى سنوات عديدة، ولكن في هذا النموذج، سنستخدم فقط البيانات التي تعود إلى عام 2000 بعد عام 2000:
query="""
SELECT
weight_pounds,
is_male,
mother_age,
plurality,
gestation_weeks
FROM
publicdata.samples.natality
WHERE year > 2000
LIMIT 10000
"""
df = bigquery.Client().query(query).to_dataframe()
df.head()
للحصول على ملخص للميزات الرقمية في مجموعة البيانات الخاصة بنا، قم بتشغيل:
df.describe()
يوضح هذا المتوسط والانحراف المعياري والحد الأدنى وغيرها من المقاييس للأعمدة الرقمية. وأخيرًا، دعونا نحصل على بعض البيانات على العمود المنطقي الذي يشير إلى جنس الجنين. يمكننا القيام بذلك باستخدام Pandas طريقة value_counts
:
df['is_male'].value_counts()
يبدو أن مجموعة البيانات متوازنة تقريبًا 50/50 حسب الجنس.
4. تجهيز البيانات للتدريب
في هذا القسم، سنقسم البيانات إلى مجموعات تدريب واختبار لإعدادها لتطبيق نموذجنا.
الخطوة 1: استخراج عمود التصنيف
أول إفلات الصفوف ذات القيم الفارغة من مجموعة البيانات وترتيب البيانات عشوائيًا:
df = df.dropna()
df = shuffle(df, random_state=2)
بعد ذلك، استخرج عمود التسمية إلى متغير منفصل وأنشئ DataFrame بميزاتنا فقط:
labels = df['weight_pounds']
data = df.drop(columns=['weight_pounds'])
الآن إذا عاينت مجموعة البيانات عن طريق تشغيل data.head()
، من المفترض أن تظهر لك الميزات الأربع التي سنستخدمها للتدريب.
الخطوة 2: تحويل ميزات الفئوية إلى أعداد صحيحة
بما أنّ XGBoost يتطلب أن تكون جميع البيانات رقمية، سنحتاج إلى تغيير طريقة تمثيل البيانات في عمود is_male
، والتي تكون حاليًا سلاسل True / False. يمكننا القيام بذلك ببساطة عن طريق تغيير نوع هذا العمود:
data['is_male'] = data['is_male'].astype(int)
الخطوة 3: تقسيم البيانات إلى مجموعات تدريب واختبار
سنستخدم أداة train_test_split
من ساي كيت ليرن التي استوردناها في بداية الدفتر لتقسيم البيانات إلى مجموعات تدريب واختبار:
x,y = data,labels
x_train,x_test,y_train,y_test = train_test_split(x,y)
نحن الآن جاهزون لبناء نموذجنا وتدريبه!
5. مقالة تمهيدية سريعة في XGBoost
XGBoost هو إطار عمل لتعلُّم الآلة يستخدم أشجار القرارات وتعزيز التدرّج لإنشاء نماذج توقّعية. يعمل هذا المنهج من خلال تجميع عدة أشجار قرارات معًا بناءً على الدرجة المرتبطة بالعُقد الورقية المختلفة في أي شجرة.
يمثِّل المخطّط أدناه تمثيلاً بصريًا مبسّطًا لشبكة نموذجية واحدة لنموذج يقيّم ما إذا كان أحد الأشخاص سيعجبه لعبة كمبيوتر معيّنة أم لا (هذا من مستندات XGBoost):
لماذا نستخدم XGBoost لهذا النموذج؟ لقد تبيَّن أنّ الشبكات العصبية التقليدية تحقّق أفضل أداء مع البيانات غير المنظَّمة مثل الصور والنصوص، ولكن غالبًا ما تحقّق أشجار القرارات أداءً جيدًا للغاية على البيانات المنظَّمة مثل مجموعة بيانات الرهن العقاري التي سنستخدمها في هذا الدرس التطبيقي حول الترميز.
6. إنشاء نموذج XGBoost وتدريبه وتقييمه
الخطوة 1: تحديد نموذج XGBoost وتدريبه
يمكنك إنشاء نموذج في XGBoost بسهولة. سنستخدم الفئة XGBRegressor
لإنشاء النموذج، ونحتاج فقط إلى تمرير معلَمة objective
المناسبة لمهمتنا المحدّدة. وهنا نستخدم نموذج انحدار نظرًا لأننا نتنبأ بقيمة عددية (وزن الطفل). إذا كنا نجمع بياناتنا بدلاً من ذلك لتحديد ما إذا كان وزن الطفل أكثر أو أقل من 6 أرطال، فسنستخدم نموذج تصنيف.
في هذه الحالة، سنستخدم reg:squarederror
كهدف للنموذج.
سينشئ الكود التالي نموذج XGBoost:
model = xgb.XGBRegressor(
objective='reg:linear'
)
يمكنك تدريب النموذج باستخدام سطر واحد من الرموز، ما يؤدي إلى استدعاء طريقة fit()
وتمرير بيانات التدريب والتصنيفات إليها.
model.fit(x_train, y_train)
الخطوة الثانية: تقييم النموذج على بيانات الاختبار
يمكننا الآن استخدام النموذج المدرَّب لإنشاء توقّعات بشأن بيانات الاختبار باستخدام الدالة predict()
:
y_pred = model.predict(x_test)
لنرَ كيف كان أداء النموذج في أول 20 قيمة من مجموعة الاختبار. سنطبع أدناه وزن الطفل المتوقع بالإضافة إلى وزن الطفل الفعلي لكل مثال على الاختبار:
for i in range(20):
print('Predicted weight: ', y_pred[i])
print('Actual weight: ', y_test.iloc[i])
print()
الخطوة 3: حفظ النموذج
لنشر النموذج، شغِّل الرمز التالي لحفظه في ملف محلي:
model.save_model('model.bst')
7. تفعيل النموذج في Cloud AI Platform
لقد نجح نموذجنا في العمل محليًا، ولكن سيكون من الرائع أن نتمكن من التنبؤ به من أي مكان (وليس هذا الدفتر فقط!). في هذه الخطوة سوف ننشره إلى السحابة.
الخطوة 1: إنشاء حزمة Cloud Storage لنموذجنا
لنبدأ أولاً بتعريف بعض متغيرات البيئة التي سنستخدمها خلال باقي الدرس التطبيقي حول الترميز. املأ القيم أدناه باسم مشروعك على Google Cloud، واسم حزمة التخزين في السحابة الإلكترونية التي تريد إنشاءها (يجب أن تكون فريدة عالميًا)، واسم الإصدار للإصدار الأول من نموذجك:
# Update these to your own GCP project, model, and version names
GCP_PROJECT = 'your-gcp-project'
MODEL_BUCKET = 'gs://storage_bucket_name'
VERSION_NAME = 'v1'
MODEL_NAME = 'baby_weight'
نحن الآن جاهزون لإنشاء حزمة تخزين لتخزين ملف نموذج XGBoost. سنوجه Cloud AI Platform إلى هذا الملف عند نشر التطبيق.
نفِّذ الأمر gsutil
التالي من ورقة الملاحظات لإنشاء حزمة:
!gsutil mb $MODEL_BUCKET
الخطوة 2: نسخ ملف النموذج إلى Cloud Storage
بعد ذلك، سننسخ ملف نموذج XGBoost المحفوظ إلى Cloud Storage. قم بتشغيل الأمر gsutil التالي:
!gsutil cp ./model.bst $MODEL_BUCKET
انتقِل إلى متصفِّح مساحة التخزين في Cloud Console للتأكّد من نسخ الملف:
الخطوة 3: إنشاء النموذج ونشره
سيؤدي أمر gcloud التالي في ai-platform
إلى إنشاء نموذج جديد في مشروعك. سنطلق على هذا اسم xgb_mortgage
:
!gcloud ai-platform models create $MODEL_NAME
حان الوقت الآن لنشر النموذج. يمكننا القيام بذلك باستخدام الأمر gcloud التالي:
!gcloud ai-platform versions create $VERSION_NAME \
--model=$MODEL_NAME \
--framework='XGBOOST' \
--runtime-version=1.15 \
--origin=$MODEL_BUCKET \
--python-version=3.7 \
--project=$GCP_PROJECT
أثناء تنفيذ هذه العملية، يُرجى التحقّق من قسم النماذج في وحدة تحكّم AI Platform. من المفترض أن يظهر لك الإصدار الجديد الذي يتم نشره هناك:
عند اكتمال النشر بنجاح، ستظهر لك علامة اختيار خضراء تشير إلى موضع مؤشر التحميل. من المفترض أن يستغرق النشر من دقيقتين إلى 3 دقائق.
الخطوة 4: اختبار النموذج المنشور
للتأكد من أنّ النموذج المنشور يعمل، اختبِره باستخدام gcloud لإنشاء توقُّع. أولاً، احفظ ملف جسون يتضمن مثالين من مجموعة الاختبار:
%%writefile predictions.json
[0.0, 33.0, 1.0, 27.0]
[1.0, 26.0, 1.0, 40.0]
اختبر النموذج من خلال حفظ ناتج أمر gcloud التالي في متغير وطباعته:
prediction = !gcloud ai-platform predict --model=$MODEL_NAME --json-instances=predictions.json --version=$VERSION_NAME
print(prediction.s)
من المفترض أن ترى تنبؤات النموذج في المخرجات. وزن الطفل الفعلي لهذين المثالين هو 1.9 و8.1 رطل على التوالي.
8. تنظيف
إذا أردت مواصلة استخدام ورقة الملاحظات هذه، ننصحك بإيقافها عندما لا تكون قيد الاستخدام. من واجهة مستخدم Notebooks في Cloud Console، اختَر ورقة الملاحظات ثم انقر على إيقاف:
إذا كنت ترغب في حذف جميع الموارد التي أنشأتها في هذا التمرين المعملي، فاحذف مثيل دفتر الملاحظات بدلاً من إيقافه.
باستخدام قائمة التنقّل في Cloud Console، انتقِل إلى "مساحة التخزين" واحذف كلتا المجموعتَين اللتين أنشأتهما لتخزين مواد عرض نموذجك.