بناء مصنف باستخدام طرق تعلم الآلة بلغة البايثون ومكتبة Scikit-Learn
في السنوات الأخيرة، شهد مجال تعلم الآلة تطورًا ملحوظًا نتيجة التقدم الكبير في تقنيات الحوسبة وازدياد كمية البيانات المتاحة. من بين الأدوات البرمجية التي أصبحت لا غنى عنها لبناء نماذج تعلم الآلة هي مكتبة Scikit-Learn بلغة البايثون، والتي تعد من أشهر المكتبات المفتوحة المصدر لتطبيق خوارزميات التعلم الآلي بطريقة سهلة وفعالة. هذا المقال يستعرض بشكل مفصل كيفية بناء مصنف (Classifier) باستخدام تقنيات تعلم الآلة مع الاعتماد على مكتبة Scikit-Learn، مع التركيز على المفاهيم الأساسية، خطوات العمل، أنواع المصنفات، وأمثلة تطبيقية عملية مع شرح تفصيلي للكود البرمجي.
مقدمة عن تعلم الآلة والمصنفات
تعلم الآلة هو فرع من فروع الذكاء الاصطناعي يهدف إلى تطوير أنظمة قادرة على التعلم من البيانات وتحسين أدائها تلقائيًا دون تدخل بشري مباشر. من بين المهام الرئيسية في تعلم الآلة تأتي مهمة التصنيف (Classification) التي تهدف إلى تصنيف البيانات إلى فئات محددة مسبقًا بناءً على خصائصها.
المصنف هو نموذج تعلم آلي يُدرب على بيانات معروفة الفئات (بيانات تدريبية تحتوي على مدخلات ونتائج) ليتمكن من التنبؤ بفئة البيانات الجديدة غير المعروفة. أمثلة على تطبيقات المصنفات كثيرة مثل تصنيف الرسائل الإلكترونية بين بريد هام وبريد مزعج، التعرف على الصور، أو تصنيف الحالات الطبية إلى مرضية أو سليمة.
مكتبة Scikit-Learn: نظرة عامة
تعتبر مكتبة Scikit-Learn (المعروفة اختصارًا بـ sklearn) واحدة من أكثر مكتبات تعلم الآلة استخدامًا في بايثون، وذلك لما تتميز به من سهولة الاستخدام، دعم واسع للخوارزميات، وفعالية عالية. تعتمد المكتبة على مكتبات أخرى قوية مثل Numpy وPandas للعمليات العددية والتعامل مع البيانات.
تقدم Scikit-Learn واجهات موحدة لتطبيق خوارزميات التصنيف، الانحدار، التجميع، وتقنيات معالجة البيانات مثل تقليل الأبعاد، اختيار الخصائص، والتهيئة المسبقة للبيانات.
خطوات بناء مصنف باستخدام Scikit-Learn
لبناء نموذج مصنف فعال باستخدام Scikit-Learn، يتم اتباع سلسلة من الخطوات المنهجية، تبدأ من تحضير البيانات مرورًا ببناء النموذج وانتهاءً بتقييمه واختباره:
1. جمع البيانات وتجهيزها
البيانات هي الأساس لبناء أي نموذج تعلم آلي، ويجب أن تكون ممثلة بشكل كافٍ للفئات المطلوب تصنيفها. يتم جمع البيانات من مصادر مختلفة، ثم يتم تنظيفها وتحويلها لصيغة مناسبة. في كثير من الأحيان، تشمل هذه المرحلة التعامل مع القيم الناقصة، تحويل القيم النصية إلى قيم عددية (مثلاً عن طريق الترميز)، وتطبيع البيانات (Scaling).
2. تقسيم البيانات
يتم تقسيم البيانات عادة إلى مجموعة تدريب (Training set) لتدريب النموذج، ومجموعة اختبار (Test set) لتقييم الأداء. نسبة التقسيم الشائعة هي 70% تدريب مقابل 30% اختبار، أو 80% إلى 20%. كما يمكن استخدام مجموعة تحقق (Validation set) لضبط معلمات النموذج.
3. اختيار نوع المصنف
تقدم مكتبة Scikit-Learn العديد من خوارزميات التصنيف، من أشهرها:
-
مصنف الانحدار اللوجستي (Logistic Regression): مناسب للمشكلات ذات التصنيف الثنائي.
-
شجرة القرار (Decision Tree): سهل الفهم والتنفيذ.
-
الغابات العشوائية (Random Forest): مجموعة من أشجار القرار لتحسين الدقة.
-
دعم آلات المتجهات (Support Vector Machines – SVM): فعال في التصنيف المعقد.
-
نايف بايز (Naive Bayes): يستخدم بشكل واسع في النصوص وتصنيف البريد المزعج.
-
الشبكات العصبية (Neural Networks): معقدة وأكثر قوة مع مجموعات بيانات كبيرة.
4. تدريب النموذج
تُستخدم بيانات التدريب لتعليم النموذج وتمكينه من اكتساب المعرفة حول الأنماط في البيانات. في Scikit-Learn، يتم ذلك عادة باستخدام دالة fit().
5. تقييم النموذج
بعد التدريب، يتم تقييم النموذج باستخدام بيانات الاختبار لمعرفة مدى دقته وقدرته على التعميم. من مقاييس التقييم المهمة:
-
الدقة (Accuracy): نسبة التوقعات الصحيحة.
-
المصفوفة الالتباسية (Confusion Matrix): توضح عدد التوقعات الصحيحة والخاطئة لكل فئة.
-
المقاييس الأخرى: مثل الحساسية (Recall)، الدقة النوعية (Precision)، ومؤشر F1.
6. تحسين النموذج (Tuning)
يمكن تحسين النموذج عن طريق تعديل المعلمات (Hyperparameters) واستخدام تقنيات مثل التحقق المتقاطع (Cross-validation) للحد من الإفراط في التعميم (Overfitting).
تطبيق عملي لبناء مصنف باستخدام Scikit-Learn
في هذا الجزء، نعرض مثالًا عمليًا لبناء نموذج مصنف باستخدام بيانات شهيرة وهي مجموعة بيانات “Iris” والتي تستخدم غالبًا كنموذج تعليمي في تعلم الآلة.
استيراد المكتبات والبيانات
pythonimport numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
تحميل البيانات
pythoniris = load_iris()
X = iris.data # ميزات البيانات (طول و عرض السيقان والأوراق)
y = iris.target # الفئات (أنواع الأزهار)
تقسيم البيانات
pythonX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
تهيئة البيانات (تطبيع)
pythonscaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test)
اختيار وتدريب المصنف
في هذا المثال، سنستخدم الغابات العشوائية (Random Forest) لما تتميز به من قوة ومرونة:
pythonmodel = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
التنبؤ وتقييم النموذج
pythony_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
conf_matrix = confusion_matrix(y_test, y_pred)
report = classification_report(y_test, y_pred, target_names=iris.target_names)
print(f"Accuracy: {accuracy:.2f}")
print("Confusion Matrix:")
print(conf_matrix)
print("Classification Report:")
print(report)
شرح تفصيلي لأهم المفاهيم المستخدمة
1. StandardScaler
تعد عملية تطبيع البيانات مهمة جدًا لأنها تجعل ميزات البيانات لها نفس المقياس، وهذا يحسن من أداء العديد من الخوارزميات التي تعتمد على المسافات مثل دعم آلات المتجهات والغابات العشوائية.
2. Random Forest
الغابات العشوائية عبارة عن تجميع لعدة أشجار قرار (Decision Trees) يتم تدريب كل منها على عينة عشوائية من البيانات مع استبدال (Bootstrap sampling)، ثم يتم تجميع النتائج عن طريق التصويت. هذه التقنية تقلل من التحيز وتحسن من دقة التنبؤ.
3. Confusion Matrix
هي مصفوفة توضح توزيع التنبؤات الصحيحة والخاطئة عبر الفئات المختلفة، حيث توفر رؤية أعمق من مجرد دقة النموذج الواحدة.
مقاييس تقييم الأداء الشائعة في التصنيف
| المقياس | الوصف | الصيغة الحسابية |
|---|---|---|
| الدقة (Accuracy) | نسبة التوقعات الصحيحة إلى إجمالي التوقعات | TP+TN+FP+FNTP+TN |
| الدقة النوعية (Precision) | نسبة التوقعات الصحيحة لفئة معينة إلى إجمالي التوقعات التي صنفت على أنها من تلك الفئة | TP+FPTP |
| الحساسية (Recall) | نسبة التوقعات الصحيحة لفئة معينة إلى إجمالي الحالات الحقيقية لتلك الفئة | TP+FNTP |
| مؤشر F1 | المتوسط التوافقي بين الدقة النوعية والحساسية | 2×Precision+RecallPrecision×Recall |
تحسين النموذج باستخدام التحقق المتقاطع وضبط المعلمات
التحقق المتقاطع هو تقنية مهمة لتقييم أداء النموذج بشكل أكثر موضوعية من خلال تقسيم البيانات إلى عدة أجزاء (folds) وتدريب النموذج واختباره على هذه الأجزاء بشكل متكرر.
pythonfrom sklearn.model_selection import GridSearchCV
param_grid = {
'n_estimators': [50, 100, 200],
'max_depth': [None, 10, 20, 30],
'min_samples_split': [2, 5, 10]
}
grid_search = GridSearchCV(estimator=RandomForestClassifier(random_state=42),
param_grid=param_grid,
cv=5,
n_jobs=-1,
scoring='accuracy')
grid_search.fit(X_train, y_train)
best_params = grid_search.best_params_
best_score = grid_search.best_score_
print(f"أفضل المعلمات: {best_params}")
print(f"أفضل دقة في التحقق المتقاطع: {best_score:.2f}")
التعامل مع البيانات النصية في التصنيف
تعتبر معالجة البيانات النصية تحديًا خاصًا في تعلم الآلة بسبب طبيعتها غير العددية. تعتمد الخطوة الأولى على تحويل النصوص إلى تمثيلات عددية باستخدام تقنيات مثل:
-
التعبئة (Tokenization): تقسيم النص إلى كلمات أو جمل.
-
تمثيل الكلمات (Vectorization): مثل TF-IDF أو عد الكلمات (Count Vectorizer).
-
تضمين الكلمات (Word Embeddings): مثل Word2Vec أو GloVe.
Scikit-Learn يوفر أدوات جاهزة لتحويل النصوص إلى تمثيلات عددية باستخدام CountVectorizer و TfidfVectorizer.
مثال تطبيقي على تصنيف نصوص
pythonfrom sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import Pipeline
# بيانات نصية نموذجية
texts = ["هذا كتاب جيد", "الطقس اليوم جميل", "الكتاب مفيد جدا", "الطقس ممطر"]
labels = [1, 0, 1, 0] # 1=مفيد، 0=غير مفيد
pipeline = Pipeline([
('tfidf', TfidfVectorizer()),
('clf', MultinomialNB())
])
pipeline.fit(texts, labels)
predictions = pipeline.predict(["هذا الطقس سيء", "الكتاب رائع"])
الخاتمة
يُعد بناء مصنف فعال باستخدام تقنيات تعلم الآلة ومكتبة Scikit-Learn عملية متكاملة تبدأ من جمع وتجهيز البيانات، مرورًا باختيار الخوارزمية المناسبة، وانتهاءً بالتقييم والتحسين. تتيح Scikit-Learn إمكانية تطبيق العديد من خوارزميات التصنيف بسهولة، مع دعم واسع لتحليل البيانات وتقييم الأداء.
التحسين المستمر للنماذج، والتعامل الصحيح مع البيانات، وفهم خصائص الخوارزميات تُعد من أهم عوامل نجاح أنظمة التصنيف. كما أن المكتبة تدعم تطبيقات متقدمة تشمل التصنيف النصي، الصور، والبيانات المعقدة، مما يجعلها أداة مثالية للباحثين والمطورين في مجال الذكاء الاصطناعي.
المصادر والمراجع
-
Pedregosa et al., “Scikit-learn: Machine Learning in Python,” Journal of Machine Learning Research, 2011.
-
Géron, Aurélien, Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow, 2nd Edition, O’Reilly Media, 2019.

