الرئيسية قاعدة المعرفة أسس الذكاء الاصطناعي التصنيف: هل هذه القطعة سليمة أم معيبة؟
أسس الذكاء الاصطناعي

التصنيف: هل هذه القطعة سليمة أم معيبة؟

ما هو التصنيف؟

التصنيف هو مهمة التنبؤ بفئة عنصر ما بناءً على خصائصه. في الصناعة، يُستخدم في كل مكان:

  • تصنيف المنتجات: سليم أو معيب
  • تحديد نوع العطل: ميكانيكي، كهربائي، حراري
  • فرز المواد الخام حسب الدرجة

الفرق بين التصنيف الثنائي والمتعدد

  • ثنائي: فئتان فقط (سليم/معيب، يعمل/متوقف)
  • متعدد: أكثر من فئتين (درجة A/B/C، نوع العطل من بين 5 أنواع)
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split

# محاكاة بيانات فحص جودة قطع معدنية
np.random.seed(42)
n = 500
data = pd.DataFrame({
    'diameter': np.random.normal(10.0, 0.1, n),
    'surface_roughness': np.random.exponential(0.5, n),
    'hardness': np.random.normal(60, 5, n),
    'weight': np.random.normal(25.0, 0.5, n)
})

# تحديد الجودة بناءً على المواصفات
data['quality'] = 'pass'
data.loc[(data['diameter'] > 10.15) | (data['diameter'] < 9.85), 'quality'] = 'fail'
data.loc[data['surface_roughness'] > 1.2, 'quality'] = 'fail'
data.loc[data['hardness'] < 50, 'quality'] = 'fail'

print(f"توزيع الفئات:")
print(data['quality'].value_counts())

شجرة القرار: قرارات متسلسلة

شجرة القرار تحاكي طريقة تفكير مهندس الجودة: سلسلة من الأسئلة تقود للقرار:

from sklearn.tree import DecisionTreeClassifier, export_text
from sklearn.metrics import accuracy_score, classification_report

X = data[['diameter', 'surface_roughness', 'hardness', 'weight']]
y = data['quality']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# بناء شجرة القرار
tree_model = DecisionTreeClassifier(max_depth=4, random_state=42)
tree_model.fit(X_train, y_train)

# عرض قواعد الشجرة
tree_rules = export_text(tree_model, feature_names=list(X.columns))
print("قواعد شجرة القرار:")
print(tree_rules[:500])

# تقييم الأداء
y_pred = tree_model.predict(X_test)
print(f"\nدقة شجرة القرار: {accuracy_score(y_test, y_pred):.4f}")

مميزات شجرة القرار

  • قابلة للتفسير: يمكن شرحها لمهندس الإنتاج بسهولة
  • لا تحتاج تطبيع: تعمل مباشرة مع القيم الخام
  • سريعة: التدريب والتنبؤ سريعان جداً

الغابة العشوائية: قوة الأعداد

الغابة العشوائية تبني عشرات أو مئات أشجار القرار وتأخذ تصويت الأغلبية:

from sklearn.ensemble import RandomForestClassifier

# بناء الغابة العشوائية
rf_model = RandomForestClassifier(n_estimators=100, max_depth=6, random_state=42)
rf_model.fit(X_train, y_train)

y_pred_rf = rf_model.predict(X_test)
print(f"دقة الغابة العشوائية: {accuracy_score(y_test, y_pred_rf):.4f}")

# أهمية المتغيرات: أي عامل يؤثر أكثر في الجودة؟
importance = pd.DataFrame({
    'feature': X.columns,
    'importance': rf_model.feature_importances_
}).sort_values('importance', ascending=False)

print("\nأهمية المتغيرات:")
for _, row in importance.iterrows():
    bar = '█' * int(row['importance'] * 40)
    print(f"  {row['feature']:20s} {row['importance']:.3f} {bar}")

SVM: فصل الفئات بخط أمثل

آلة المتجه الداعم (SVM) تجد الحد الفاصل الأمثل بين الفئات:

from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler

# SVM يتطلب تطبيع البيانات
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# بناء نموذج SVM
svm_model = SVC(kernel='rbf', C=1.0, gamma='scale', random_state=42)
svm_model.fit(X_train_scaled, y_train)

y_pred_svm = svm_model.predict(X_test_scaled)
print(f"دقة SVM: {accuracy_score(y_test, y_pred_svm):.4f}")

# مقارنة شاملة
print("\nتقرير التصنيف (SVM):")
print(classification_report(y_test, y_pred_svm))

اختيار الخوارزمية المناسبة

لا توجد خوارزمية أفضل دائماً. الاختيار يعتمد على السياق:

from sklearn.metrics import accuracy_score

# مقارنة الخوارزميات الثلاث
models = {
    'شجرة القرار': (tree_model, X_test),
    'الغابة العشوائية': (rf_model, X_test),
    'SVM': (svm_model, X_test_scaled)
}

print("مقارنة أداء الخوارزميات:")
print("-" * 45)
for name, (model, x_data) in models.items():
    pred = model.predict(x_data)
    acc = accuracy_score(y_test, pred)
    print(f"  {name:20s}  الدقة: {acc:.4f}")

دليل الاختيار السريع

المعيار شجرة القرار الغابة العشوائية SVM
قابلية التفسير ممتازة متوسطة ضعيفة
الدقة جيدة ممتازة ممتازة
السرعة سريعة جداً متوسطة بطيئة مع بيانات كبيرة
الاستخدام الأمثل تفسير القرارات أفضل دقة عامة فصل معقد

مثال عملي: تصنيف جودة القطع المنتجة تلقائياً

سنبني نظام فحص جودة تلقائي متكامل:

import pandas as pd
import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report, confusion_matrix
import matplotlib.pyplot as plt

# محاكاة بيانات فحص 2000 قطعة من 3 فئات جودة
np.random.seed(42)
n = 2000
parts = pd.DataFrame({
    'length_mm': np.random.normal(100, 0.5, n),
    'width_mm': np.random.normal(50, 0.3, n),
    'surface_finish': np.random.exponential(0.3, n),
    'tensile_strength': np.random.normal(400, 20, n),
    'porosity_pct': np.random.exponential(0.5, n)
})

# تصنيف: A (ممتاز)، B (مقبول)، C (مرفوض)
conditions = [
    (parts['surface_finish'] < 0.2) & (parts['porosity_pct'] < 0.3),
    (parts['surface_finish'] < 0.5) & (parts['porosity_pct'] < 0.8)
]
parts['grade'] = np.select(conditions, ['A', 'B'], default='C')

print(f"توزيع الدرجات:")
print(parts['grade'].value_counts().sort_index())

# بناء المصنف
features = ['length_mm', 'width_mm', 'surface_finish', 'tensile_strength', 'porosity_pct']
X = parts[features]
y = parts['grade']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

classifier = RandomForestClassifier(n_estimators=150, max_depth=8, random_state=42)
classifier.fit(X_train, y_train)

y_pred = classifier.predict(X_test)
print("\nتقرير التصنيف:")
print(classification_report(y_test, y_pred))

# توقع جودة قطعة جديدة
new_part = pd.DataFrame({
    'length_mm': [100.1], 'width_mm': [50.05],
    'surface_finish': [0.15], 'tensile_strength': [410],
    'porosity_pct': [0.2]
})
prediction = classifier.predict(new_part)[0]
print(f"\nتوقع جودة القطعة الجديدة: الدرجة {prediction}")

الخلاصة

التصنيف أداة أساسية في أتمتة ضبط الجودة الصناعية. تعلمنا ثلاث خوارزميات رئيسية وكيفية اختيار الأنسب لكل حالة. شجرة القرار مثالية عندما نحتاج تفسير القرارات، والغابة العشوائية للدقة العالية، وSVM للحدود المعقدة. في الدرس القادم سنتعلم التجميع (Clustering) للتعلم غير المُشرف.

classification decision-tree random-forest SVM quality-control accuracy التصنيف شجرة القرار الغابة العشوائية مراقبة الجودة الدقة النموذج