الرئيسية قاعدة المعرفة أسس الذكاء الاصطناعي خوارزميات التصنيف: قرارات آلية ذكية
أسس الذكاء الاصطناعي

خوارزميات التصنيف: قرارات آلية ذكية

ما هي خوارزميات التصنيف؟

تخيّل مفتّش جودة في مصنع قطع بلاستيكية يفحص كل قطعة ويقرر: سليمة أم معيبة. هذا القرار يعتمد على ملاحظات (لون، أبعاد، وزن) وخبرة متراكمة. خوارزميات التصنيف تفعل نفس الشيء — تتعلم من أمثلة سابقة لتصنّف بيانات جديدة في فئات محددة.

التصنيف (Classification) هو مهمة تعلم آلي مُشرف عليه (supervised learning) حيث يتعلم النموذج من بيانات مُعلَّمة (labeled data) ثم يتنبأ بفئة البيانات الجديدة. الفئات يمكن أن تكون ثنائية (سليم/معيب) أو متعددة (عطل كهربائي/ميكانيكي/حراري).

شجرة القرار (Decision Tree)

أبسط خوارزمية تصنيف وأكثرها قابلية للتفسير. تصوّرها كسلسلة أسئلة بنعم/لا تقود لقرار نهائي.

مثال صناعي: تصنيف قطع مصبوبة بالحقن — هل القطعة سليمة؟

هل درجة حرارة القالب > 210°C؟
├── نعم → هل ضغط الحقن > 80 بار؟
│   ├── نعم → سليمة (95% ثقة)
│   └── لا → معيبة - فراغات داخلية
└── لا → هل زمن التبريد > 15 ثانية؟
    ├── نعم → سليمة (88% ثقة)
    └── لا → معيبة - تشوّه سطحي
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
import numpy as np

# بيانات تدريب: [حرارة القالب، ضغط الحقن، زمن التبريد]
X = np.array([
    [220, 85, 18], [200, 70, 12], [215, 90, 16],
    [195, 60, 10], [225, 88, 20], [205, 75, 14],
    [210, 82, 17], [190, 55, 9],  [218, 86, 19],
    [198, 65, 11], [222, 92, 21], [208, 78, 15]
])
# التسميات: 1 = سليمة، 0 = معيبة
y = np.array([1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1])

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25)

tree = DecisionTreeClassifier(max_depth=3)
tree.fit(X_train, y_train)

# تصنيف قطعة جديدة
new_part = [[212, 83, 16]]
result = tree.predict(new_part)
print(f"التصنيف: {'سليمة' if result[0] == 1 else 'معيبة'}")

الغابة العشوائية (Random Forest)

المشكلة في شجرة واحدة: قد تتأثر كثيراً بالبيانات التدريبية (overfitting). الحل؟ بناء مئات الأشجار المختلفة وأخذ تصويت الأغلبية.

تصوّر 100 مفتّش جودة بخبرات مختلفة — كل واحد يفحص القطعة ويصوّت. القرار النهائي هو رأي الأغلبية. هذا أدق بكثير من الاعتماد على مفتّش واحد.

from sklearn.ensemble import RandomForestClassifier

forest = RandomForestClassifier(n_estimators=100, max_depth=5)
forest.fit(X_train, y_train)

# أهمية كل ميزة
feature_names = ["حرارة القالب", "ضغط الحقن", "زمن التبريد"]
for name, importance in zip(feature_names, forest.feature_importances_):
    print(f"  {name}: {importance:.2%}")

ميزة إضافية: الغابة العشوائية تعطيك أهمية الميزات (Feature Importance) — أي عامل يؤثر أكثر على الجودة. هذا يساعد مهندسي العمليات في تركيز جهود التحسين.

آلة المتجهات الداعمة (SVM)

SVM تبحث عن أفضل خط فاصل (أو سطح فاصل في أبعاد أعلى) بين الفئات، مع تعظيم المسافة بين أقرب نقاط الفئتين.

تخيّل خريطة ثنائية البعد: المحور الأفقي هو الاهتزاز والمحور العمودي هو الحرارة. النقاط الحمراء (أعطال) والخضراء (طبيعي) متداخلة قليلاً. SVM يجد الخط الذي يفصلهما بأكبر هامش ممكن.

from sklearn.svm import SVC

svm_model = SVC(kernel='rbf', C=1.0, gamma='scale')
svm_model.fit(X_train, y_train)

prediction = svm_model.predict(new_part)
print(f"تصنيف SVM: {'سليمة' if prediction[0] == 1 else 'معيبة'}")
نوع النواة (Kernel) الاستخدام
خطي (linear) بيانات قابلة للفصل بخط مستقيم
متعدد الحدود (poly) حدود قرار منحنية
دالة أساس شعاعي (rbf) الأكثر مرونة — الخيار الافتراضي

خوارزمية الجيران الأقرب (k-NN)

أبسط خوارزمية على الإطلاق: لتصنيف نقطة جديدة، انظر إلى أقرب k نقاط تدريب واختر الفئة الأكثر تكراراً بينها.

تصوّر أنك مهندس جديد في مصنع ورأيت قطعة مشبوهة. تسأل أقرب 5 زملاء خبراء — 4 منهم قالوا "معيبة" و1 قال "سليمة". القرار: معيبة.

from sklearn.neighbors import KNeighborsClassifier

knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
print(f"تصنيف k-NN: {'سليمة' if knn.predict(new_part)[0] == 1 else 'معيبة'}")

تحذير: k-NN بطيء مع بيانات كبيرة لأنه يحسب المسافة لكل نقطة تدريب عند كل تنبؤ.

مقارنة الخوارزميات

المعيار شجرة القرار غابة عشوائية SVM k-NN
قابلية التفسير عالية جداً متوسطة منخفضة متوسطة
سرعة التدريب سريع متوسط بطيء مع بيانات كبيرة لا يوجد تدريب
سرعة التنبؤ سريع جداً سريع سريع بطيء
مقاوم للإفراط لا نعم نعم يعتمد على k
يحتاج تطبيع لا لا نعم نعم

مصفوفة الارتباك (Confusion Matrix)

بعد تدريب النموذج، كيف نقيّم أداءه؟ مصفوفة الارتباك تكشف أنواع الأخطاء بالتفصيل.

                     التنبؤ
                  سليمة    معيبة
الفعلي  سليمة  |  TP=85  |  FP=5   |
        معيبة  |  FN=3   |  TN=7   |
المقياس الصيغة المعنى
الدقة (Precision) TP / (TP + FP) من بين ما صنّفه "سليمة"، كم فعلاً سليم؟
الاسترجاع (Recall) TP / (TP + FN) من بين السليمة فعلاً، كم اكتشفه؟
F1-Score 2 × (P × R) / (P + R) التوازن بين الدقة والاسترجاع
الدقة الكلية (Accuracy) (TP + TN) / الكل النسبة الإجمالية للتنبؤات الصحيحة
from sklearn.metrics import classification_report, confusion_matrix

y_pred = forest.predict(X_test)
print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred,
      target_names=["معيبة", "سليمة"]))

متى نهتم بالاسترجاع أكثر من الدقة؟

في الصناعة، تمرير قطعة معيبة للعميل (False Negative) أخطر بكثير من رفض قطعة سليمة (False Positive). لذلك نريد استرجاعاً عالياً لفئة المعيب — أي اكتشاف أكبر عدد ممكن من العيوب حتى لو رفضنا بعض القطع السليمة.

منحنى ROC والمساحة تحت المنحنى (AUC)

منحنى ROC يرسم العلاقة بين معدل الإيجابيات الحقيقية (Recall) ومعدل الإيجابيات الكاذبة عند عتبات تصنيف مختلفة.

  • AUC = 1.0: نموذج مثالي
  • AUC = 0.5: لا أفضل من التخمين العشوائي
  • AUC > 0.9: ممتاز للتطبيقات الصناعية
from sklearn.metrics import roc_auc_score, roc_curve

# نحتاج احتمالات وليس تصنيفات
y_proba = forest.predict_proba(X_test)[:, 1]
auc = roc_auc_score(y_test, y_proba)
print(f"AUC: {auc:.3f}")

التطبيقات الصناعية

تصنيف القطع: سليمة مقابل معيبة

كاميرا على خط الإنتاج تلتقط صورة كل قطعة. خوارزمية تصنيف (عادةً غابة عشوائية أو شبكة عصبية) تستخرج ميزات من الصورة وتقرر فوراً: تمرير أو رفض.

تحديد نوع العطل

بدلاً من مجرد "يوجد عطل"، التصنيف المتعدد يحدد النوع: عطل كهربائي (ارتفاع تيار)، ميكانيكي (اهتزاز غير طبيعي)، حراري (ارتفاع حرارة). هذا يوجّه فريق الصيانة مباشرة للمشكلة.

فرز المواد الخام

في مصانع إعادة التدوير، حساسات الأشعة تحت الحمراء مع خوارزمية SVM تصنّف البلاستيك حسب نوعه (PET, HDPE, PVC) لفرز تلقائي فوري.

نصائح عملية

  1. ابدأ بغابة عشوائية — أداء ممتاز مع ضبط قليل (minimal tuning).
  2. موازنة الفئات — في الصناعة، المعيب نادر (1-5%). استخدم class_weight='balanced' أو SMOTE.
  3. أهمية الميزات — استخدمها لتحديد أي حساسات تستحق الاستثمار فيها.
  4. لا تتجاهل مصفوفة الارتباك — الدقة الكلية وحدها مضللة مع فئات غير متوازنة.
  5. تطبيع البيانات — ضروري لـ SVM و k-NN، اختياري للأشجار.
  6. التحقق المتقاطع — استخدم 5-fold cross-validation للتقييم الموثوق.
classification decision-tree SVM random-forest confusion-matrix accuracy التصنيف شجرة القرار آلة المتجهات الداعمة الغابة العشوائية مصفوفة الارتباك الدقة