تعزيز التدرج هو خوارزمية تعلّم آلي قوية ومستخدمة على نطاق واسع في علم البيانات وتستخدم لمهام التصنيف. فهي جزء من عائلة من طرق أساليب التعلم التجميعية، بجانب طريقة التعبئة، والتي تجمع بين تنبؤات العديد من النماذج الأبسط لتحسين الأداء العام. حيث يستخدم الانحدار المعزز بالتدرج تعزيز التدرج لتوليد بيانات الإخراج بشكل أفضل استنادًا إلى الانحدار الخطي. فمصنِّف التعزيز المتدرج، الذي سنستكشفه معًا في هذا البرنامج التعليمي، يستخدم تعزيز التدرج لتصنيف بيانات الإدخال بأفضل شكل ممكن على أنها تنتمي إلى فئتين مختلفتين أو أكثر.
تعزيز التدرج هو تحديث لخوارزمية adaboost التي تستخدم جذوع القرار بدلًا من الأشجار. وتشبه جذوع القرار هذه الأشجار الموجودة في غابة عشوائية لكن لها عقدة واحدة وورقتين فقط. وتقوم خوارزمية تعزيز التدرج ببناء نماذج بالتتابع، وتحاول كل خطوة تصحيح أخطاء التكرار السابق. وتبدأ عملية التدريب غالبًا بإنشاء نموذج تعلم ضعيف مثل شجرة القرار لبيانات التدريب. وبعد هذا التدريب الأولي، تقوم خوارزمية تعزيز التدرج بحساب الخطأ بين القيم الفعلية والمتوقعة (غالبًا ما يُطلق عليه اسم المتبقيات) ثم تقوم بتدريب مُقدِّر جديد للتنبؤ بهذا الخطأ. وتتم إضافة هذه الشجرة الجديدة إلى المجموعة التجميعية لتحديث التنبؤات لإنشاء متعلم قوي. ويظل تعزيز التدرج يكرر هذه العملية حتى يتوقف التحسين أو الوصول إلى عدد ثابت من التكرارات. والتعزيز بحد ذاته يشبه الانحدار التدرجي (النزول الاشتقاقي) لكنه 'ينحدر' في التدرج عن طريق إدخال نماذج جديدة.
ويتميز التعزيز بالعديد من المزايا؛ فهو يتمتع بأداء جيد على البيانات المجدوَلة ويمكنه التعامل مع كل من البيانات الرقمية والفئوية. ويعمل بشكل جيد حتى مع المعلمات الافتراضية وهو قوي وحصين تجاه القيم الخارجية في مجموعة البيانات. ومع ذلك، قد يكون التدريب بطيئًا وغالبًا ما يكون حساسًا جدًا للمعلمات الفائقة المحددة لعملية التدريب. وقد يؤدي الحفاظ على عدد الأشجار التي تم إنشاؤها بشكل أصغر إلى تسريع عملية التدريب عند العمل مع مجموعة بيانات كبيرة. ويتم عادة تنفيذ هذه الخطوة من خلال معلمة العمق الأقصى. وتعزيز التدرج عرضة أيضًا للإفراط في التجهيز إذا لم يتم ضبطه الدقيق بشكل صحيح. لمنع الإفراط في التجهيز، يمكنك تكوين معدل التعلم لعملية التدريب. وهذه العملية هي نفسها تقريبًا بالنسبة للمصنِّف أو الانحدار المعزز للتدرج وتستخدم في xgboost الشهير، والذي يعتمد على تعزيز التدرج عن طريق إضافة التنظيم.
في هذا البرنامج التعليمي، ستتعلم كيفية استخدام لغتين مختلفتين للبرمجة ومكتبات تعزيز التدرج لتصنيف مجموعات طائر البطريق باستخدام مجموعة بيانات Palmer Penguins الشهيرة.
يمكنك تنزيل دفتر الملاحظات لهذا البرنامج التعليمي من Github.
بينما يمكنك الاختيار من بين العديد من الأدوات، يرشدك هذا البرنامج التعليمي إلى كيفية إعداد حساب IBM لاستخدام دفتر Jupyter Notebook على watsonx.
قم بتسجيل الدخول إلى watsonx.ai باستخدام حساب IBM® Cloud الخاص بك.
أنشئ مشروع watsonx.ai.
يمكنك الحصول على معرِّف المشروع من داخل مشروعك. انقر على علامة التبويب الإدارة (Manage)، ثم انسخ معرِّف المشروع من قسم التفاصيل (Details) في صفحة عام (General). ستحتاج إلى هذا المعرِّف في هذا البرنامج التعليمي.
أنشئ Jupyter Notebook.
تأكد من تحديد "Runtime 24.1 on R 4.3 S (4 vCPU 16 GB RAM)" عند إنشاء دفتر الملاحظات. تفتح هذه الخطوة بيئة Jupyter Notebook حيث يمكنك نسخ التعليمات البرمجية من هذا البرنامج التعليمي. أو يمكنك تنزيل هذا الدفتر إلى نظامك المحلي وتحميله إلى مشروع watsonx.ai كأصل. لعرض المزيد من دروس IBM® Granite، راجع مجتمع IBM Granite. يمكن العثور على Jupyter Notebook هذا على GitHub.
في لغة R، تعد مكتبة caret أداة قوية لإعداد البيانات العامة وتركيب النماذج. وسوف تستخدمها لإعداد البيانات وتدريب النموذج نفسه.
install.packages('gbm')
install.packages('caret')
install.packages('palmerpenguins')
library(gbm)
library(caret)
library(palmerpenguins)
head(penguins) # head() returns the top 6 rows of the dataframe
summary(penguins) # prints a statistical summary of the data columns
وظيفة createDataPartition من حزمة علامة الإقحام لتقسيم مجموعة البيانات الأصلية إلى مجموعة تدريب واختبار وتقسيم البيانات إلى مجموعة تدريب (70٪) ومجموعة اختبار (30٪).
dim(penguins)
# get rid of any NA
penguins <- na.omit(penguins)
parts = caret::createDataPartition(penguins$species, p = 0.7, list = F)
train = penguins[parts, ]
test = penguins[-parts, ]
أنت الآن جاهز للتدريب والاختبار.
طريقة train في مكتبة caret تستخدم صيغ R، حيث يكون المتغير التابع (يُطلق عليه غالبًا اسم الهدف أيضًا) على الجانب الأيسر من العلامة '~'. المتغيرات المستقلة (غالبًا ما تسمى أيضًا سمة أو خاصية) موجودة على الجانب الأيمن من العلامة '~'. على سبيل المثال:
height ~ age
تتنبأ هذه الخطوة بطول طائر البطريق استنادًا إلى عمره.
لاستخدام طريقة train في مكتبة caret، عليك تمرير الصيغة وبيانات التدريب والطريقة التي سيتم استخدامها. توفر مكتبة caret طرقًا للعديد من أنواع التدريب المختلفة، لذا فإن تعيين الطريقة على أنها "gbm" هو المكان الذي ستحدد فيه استخدام تعزيز التدرج. تقوم المعلمة التالية بتكوين عملية التدريب. تقوم طريقة "repeatedcv" بإجراء التحقق المتقاطع X-fold على عينات فرعية من نقاط بيانات مجموعة التدريب. هنا، يمكنك تحديد 3 تكرارات للتحقق المتقاطع خماسي الطيّات عن طريق استخدام مجموعة مختلفة من الطيّات لكل عملية تحقق متقاطع.
model_gbm <- caret::train("species ~ .",
data = train,
method = "gbm", # gbm for gradient boosting machine
trControl = trainControl(method = "repeatedcv",
number = 5,
repeats = 3,
verboseIter = FALSE),
verbose = 0)
يمكنك الآن استخدام النموذج التنبؤي لإجراء تنبؤات على بيانات الاختبار:
pred_test = caret::confusionMatrix(
data = predict(model_gbm, test),
reference = test$species
)
print(pred_test)
تُظهر هذه الخطوة ما يلي:
Confusion Matrix and Statistics
Reference
Prediction Adelie Chinstrap Gentoo
Adelie 42 0 0
Chinstrap 0 20 0
Gentoo 1 0 35
Overall Statistics
Accuracy : 0.9898
95% CI : (0.9445, 0.9997)
No Information Rate : 0.4388
P-Value [Acc > NIR] : < 2.2e-16
Kappa : 0.984
Mcnemar's Test P-Value : NA
Statistics by Class:
Class: Adelie Class: Chinstrap Class: Gentoo
Sensitivity 0.9767 1.0000 1.0000
Specificity 1.0000 1.0000 0.9841
Pos Pred Value 1.0000 1.0000 0.9722
Neg Pred Value 0.9821 1.0000 1.0000
Prevalence 0.4388 0.2041 0.3571
Detection Rate 0.4286 0.2041 0.3571
Detection Prevalence 0.4286 0.2041 0.3673
Balanced Accuracy 0.9884 1.0000 0.9921
نظرًا لطبيعة التحقق المتقاطع باستخدام الطيات، يمكن أن تكون الحساسية والخصوصية لكل فئة مختلفة قليلًا عما لوحظ هنا، رغم أن الدقة تظل هي نفسها. الدقة جيدة جدًا، حتى مع طائر البطريق من نوع Chinstrap، الذي يشكل 20٪ من مجموعة بيانات التدريب.
ستتعلم الآن كيفية إنشاء نموذج تعزيز التدرج في Python. في نفس المشروع الذي قمت بإنشائه مسبقًا، قم بإنشاء Jupyter Notebook.
تأكد من إنشاء Jupyter Notebook باستخدام Python 3.11 في IBM Watson Studio. تأكد من تحديد "Runtime 24.1 on Python 3.11 XXS (1 vCPU 4 GB RAM)" عند إنشاء دفتر الملاحظات. وبذلك تكون جاهزًا الآن لإنشاء مصنف تعزيز التدرج باستخدام Python.
في هذه الخطوة يتم تثبيت المكتبات التي ستستخدمها لتدريب واختبار مصنِّف تعزيز التدرج. يتم التدريب نفسه باستخدام مكتبة scikit-learn وتأتي البيانات من مكتبة palmerpenguins.
!pip install seaborn pandas scikit-learn palmerpenguins
الآن قم بتثبيت المكتبات في بيئة دفتر الملاحظات:
import pandas as pd
import seaborn as sns
from sklearn.compose import ColumnTransformer
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.metrics import classification_report
from sklearn.model_selection import cross_val_score, train_test_split
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import OneHotEncoder, StandardScaler
from palmerpenguins import load_penguins
كما هو الحال في التعليمات البرمجية في R، توجد بعض القيم المفقودة (NAs) في مجموعة بيانات طائر البطريق التي تحتاج إلى إزالة. تقوم قصاصة التعليمات البرمجية هذه بتحميل مجموعة البيانات، وإزالة أي صفوف NA، ثم تقسيم البيانات إلى سمات وهدف.
# Load the penguins
penguins = load_penguins() #initialize the dataset
penguins = penguins.dropna()
X = penguins.drop("species", axis=1)
y = penguins["species"]
الآن قم بإنشاء تقسيم للتدريب والاختبار لمجموعة البيانات، بحيث يتم سحب 70% من البيانات للتدريب و30% يتم حجزها للاختبار.
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42
)
ثم بعد ذلك، ستقوم بجمع قائمتين لأسماء الأعمدة، واحدة للسمات الفئوية لـ X وأخرى للسمات الرقمية، على سبيل المثال float64 أو int64. ثم بعد ذلك، ستستخدم ColumnTransformer من مكتبة scikit-learn لتطبيق معالجة مسبقة مختلفة على أنواع الأعمدة المختلفة. يتم تطبيق OneHotEncoder على السمات الفئوية لتحويلها إلى متجهات ثنائية. يتم تطبيق StandardScaler على السمات الرقمية لتوحيدها حول متوسط f 0 وتباين يبلغ 1.
# Define categorical and numerical features
categorical_features = X.select_dtypes(
include=["object"]
).columns.tolist()
numerical_features = X.select_dtypes(
include=["float64", "int64"]
).columns.tolist()
preprocessor = ColumnTransformer(
transformers=[
("cat", OneHotEncoder(), categorical_features),
("num", StandardScaler(), numerical_features),
]
)
الآن بعد أن قمتَ بإنشاء مجموعات السمات والمُقيِّم المسبق، يمكنك إنشاء مسار عمل لتدريب النموذج. حيث إن مسار العمل يستخدم هذا المعالج المسبق على بيانات الإدخال ثم يمررها إلى خوارزمية تعزيز التدرج لبناء المصنِّف. وفي حالة وجود مجموعة بيانات أكبر أو أكثر تعقيدًا، توجد معلمات تدريب أخرى قد ترغب في تكوينها. على سبيل المثال، max_features، والتي تحدد عدد السمات التي يجب أخذها في الاعتبار عند البحث عن أفضل تقسيم أو max_depth، والتي تقلل من عدد العُقد في الشجرة. يحدد مقتطف الشفرة هذا معلمة المعيار، التي تقيس جودة التقسيم للتدريب. في هذه الحالة، نحن نستخدم متوسط الخطأ التربيعي مع درجة التحسين بواسطة Jerry Friedman (موجود خارج موقع IBM)
pipeline = Pipeline([
("preprocessor", preprocessor),
("classifier", GradientBoostingClassifier(random_state=42,
criterion='friedman_mse', max_features=2)),
])
ثم بعد ذلك، قم بإجراء التحقق المتقاطع لتقييم مدى جودة أداء مسار عمل التعلم الآلي الخاص بك على بيانات التدريب. يؤدي استدعاء طريقة الملاءمة لمسار العمل الذي أنشأته إلى تدريب النموذج. تستخدم دالة الخسارة متوسط الخطأ التربيعي (MSE) افتراضيًا.
# Perform 5-fold cross-validation
cv_scores = cross_val_score(pipeline, X_train, y_train, cv=5)
# Fit the model on the training data
pipeline.fit(X_train, y_train)
الآن تم تدريب النموذج، يمكنك التنبؤ بمجموعة الاختبار والتحقق من الأداء:
# Predict on the test set
y_pred = pipeline.predict(X_test)
# Generate classification report
report = classification_report(y_test, y_pred)
اعرض النتائج:
print(f"Mean Cross-Validation Accuracy: {cv_scores.mean():.4f}")
print("\nClassification Report:")
print(report)
تعرض هذه الخطوة النتائج التالية:
Mean Cross-Validation Accuracy: 0.9775
Classification Report:
precision recall f1-score support
Adelie 1.00 1.00 1.00 31
Chinstrap 1.00 1.00 1.00 18
Gentoo 1.00 1.00 1.00 18
accuracy 1.00 67
macro avg 1.00 1.00 1.00 67
weighted avg 1.00 1.00 1.00 67
هذه النتائج قريبة جدًا من الدقة التي تم الإبلاغ عنها بواسطة طرق R في الجزء الأول من هذا البرنامج التعليمي.
تدريب الذكاء الاصطناعي التوليدي والتحقق من صحته وضبطه ونشره، وكذلك قدرات نماذج الأساس والتعلم الآلي باستخدام IBM watsonx.ai، وهو استوديو الجيل التالي من المؤسسات لمنشئي الذكاء الاصطناعي. أنشئ تطبيقات الذكاء الاصطناعي بسرعة أكبر وببيانات أقل.
استفد من الذكاء الاصطناعي في عملك بالاستعانة بخبرة IBM الرائدة في مجال الذكاء الاصطناعي ومحفظة حلولها المتوفرة لك.
أعدّ ابتكار عمليات ومهام سير العمل الحساسة بإضافة الذكاء الاصطناعي لتعزيز التجارب وصنع القرارات في الوقت الفعلي والقيمة التجارية.