هذه الصفحة تبني النموذج الذهني القياسي الذي ستعيد استخدامه مع كل خوارزميات scikit-learn. إذا أتقنت هذه الخطوات السبع، فأنت جاهز لأي خوارزمية ML تقليدية.
الـ Workflow القياسي
كل نموذج ML في scikit-learn يمرّ بنفس الخطوات:
1. import ← استورد الخوارزمية
2. prepare X/y ← جهّز البيانات
3. split ← قسّم train/test
4. instantiate ← أنشئ كائن النموذج
5. fit ← درّب النموذج
6. predict ← تنبّؤ
7. evaluate ← قيّم الأداء
1. import
from sklearn.linear_model import LinearRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
كل خوارزمية لها استيراد خاص بها، لكن الـ methods (fit, predict, score) موحّدة.
2. prepare X و y
scikit-learn يتوقّع مصفوفتين:
X: ميزات، شكل(n_samples, n_features)— جدول.y: هدف، شكل(n_samples,)— متجه.
import numpy as np
# X: 5 صفوف، 3 ميزات (مساحة، غرف، عمر)
X = np.array([
[120, 3, 10],
[200, 4, 5],
[ 85, 2, 20],
[300, 5, 2],
[150, 3, 15],
])
# y: 5 أسعار
y = np.array([300, 550, 230, 800, 400]) # آلاف
Pandas DataFrames مقبولة أيضًا — sklearn يستخدم .values داخليًا.
import pandas as pd
df = pd.DataFrame({
'area': [120, 200, 85, 300, 150],
'rooms': [3, 4, 2, 5, 3],
'price': [300, 550, 230, 800, 400]
})
X = df[['area', 'rooms']] # DataFrame
y = df['price'] # Series
3. split
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
X, y,
test_size=0.2,
random_state=42, # للتكرار
stratify=y # للتصنيف فقط — يحافظ على نسبة الفئات
)
تفصيل في تقسيم البيانات و Cross-Validation.
4. instantiate
model = LinearRegression()
# أو
model = LogisticRegression(max_iter=1000)
# أو
model = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=42)
كل خوارزمية لها hyperparameter افتراضية. ابدأ بالافتراضية، ثم اضبطها.
5. fit
model.fit(X_train, y_train)
fit() يتعلّم من بيانات التدريب. بعد fit، النموذج جاهز.
ما يحدث داخل fit (LinearRegression):
- يحسب w (المعاملات) و b (التقاطع) عبر Normal Equation.
- يخزّنها في model.coef_ و model.intercept_.
ما يحدث داخل fit (RandomForestClassifier):
- يبني 100 شجرة قرار.
- كل شجرة تدرّب على bootstrap sample.
- يخزّن كل الأشجار.
6. predict
y_pred = model.predict(X_test)
predict() يطبّق النموذج على بيانات جديدة. النتيجة: تنبّؤات بنفس شكل y.
للتصنيف، بعض النماذج تعطي احتمالات:
# LogisticRegression / RandomForestClassifier
y_proba = model.predict_proba(X_test)
# [[0.92, 0.08], [0.15, 0.85], ...] — احتمالات كل فئة
7. evaluate
للمصنّفات (Classification)
from sklearn.metrics import accuracy_score, classification_report
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.3f}")
print(classification_report(y_test, y_pred))
تفصيل في مقاييس التصنيف.
للانحدار (Regression)
from sklearn.metrics import mean_absolute_error, r2_score
mae = mean_absolute_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f"MAE: {mae:.2f}")
print(f"R²: {r2:.3f}")
تفصيل في الانحدار الخطي.
score() — الاختصار
كثير من النماذج لها score() تُرجع المقياس الأكثر شيوعًا:
# Classification: returns accuracy
print(model.score(X_test, y_test)) # 0.92
# Regression: returns R²
print(model.score(X_test, y_test)) # 0.85
مثال موحّد — LinearRegression
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_absolute_error, r2_score
import numpy as np
# 1. تحضير
X = np.array([[50], [70], [85], [100], [120], [140], [160], [200]])
y = np.array([150, 200, 230, 270, 320, 370, 400, 480])
# 2. تقسيم
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.25, random_state=42
)
# 3. تدريب
model = LinearRegression()
model.fit(X_train, y_train)
# 4. تنبّؤ
y_pred = model.predict(X_test)
# 5. تقييم
mae = mean_absolute_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f"MAE: {mae:.2f}")
print(f"R²: {r2:.3f}")
مثال موحّد — RandomForestClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
# 1. بيانات تجريبية
X, y = make_classification(n_samples=300, n_features=8, random_state=42)
# 2. تقسيم
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.25, random_state=42, stratify=y
)
# 3. تدريب
model = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=42)
model.fit(X_train, y_train)
# 4. تنبّؤ
y_pred = model.predict(X_test)
# 5. تقييم
print(classification_report(y_test, y_pred))
خصائص fit/predict/score
| Method | يستقبل | يُرجع |
|---|---|---|
fit(X, y) | training data | self (النموذج بعد التعلّم) |
predict(X) | new data | predictions |
predict_proba(X) | new data (classifiers only) | probabilities |
score(X, y) | test data + true labels | metric (accuracy أو R² افتراضيًا) |
قواعد ذهبية
fit()على train فقط — لا تستخدمfit()على بيانات الاختبار أبدًا.predict()على test فقط بعد التدريب — للنتيجة الصادقة.score()على test — للنتيجة الصادقة.random_state— اضبطه لكل خوارزمية عشوائية لضمان التكرار.stratify=y— في التصنيف، يحافظ على نسبة الفئات في train/test.
أخطاء شائعة
fit()على كامل البيانات → تقييم متفائل زائف. قسّم أولًا.- نسيان
stratify=yفي التصنيف → قد ينتهي بـ fold بدون فئة نادرة. - استخدام
predictبدلpredict_probaحين تحتاج احتمالات → يضيءك على اختيار threshold. - عدم تثبيت
random_state→ نتائج لا تتكرّر، debugging أصعب.
الخطوات التالية
- Pipelines و preprocessing — تنظيف البيانات قبل fit.
- Model selection و tuning — ضبط hyperparameters.
- الانحدار الخطي — تطبيق مفصّل.
- الانحدار اللوجستي — تطبيق مفصّل.
- أشجار القرار و Random Forest — تطبيق مفصّل.