انطلق في بايثون سايكيت ليرن: خطوتك الأولى الملموسة اليوم

بايثون سايكيت ليرن: الأساسيات في مقال واحد — كود حقيقي، مخططات وخطوات ملموسة، مقتطفات من دورة مكونة من 33 درسًا.

انطلق في بايثون سايكيت ليرن: خطوتك الأولى الملموسة اليوم

أفضل طريقة لتعلم Python scikit Learn هي بالممارسة. يضعك هذا المقال على الطريق الصحيح مع مقتطفات عملية مستمدة من دورة تضم 33 درسًا — ما يكفي للحصول على نتيجة أولى اليوم.

tl;dr
  • مقدمة وتثبيت
  • أساسيات تعلم الآلة
  • المعالجة المسبقة للبيانات
  • الانحدار المشرف
  • التصنيف المشرف
~$ cat ./parcours.md # Python scikit Learn — 10 فصول
01
مقدمة وتثبيت
→ ما هو تعلم الآلة ؟→ تثبيت scikit-learn والبيئة المحيطة+ 1 دروس أخرى
02
أساسيات تعلم الآلة
→ مفردات ML — الميزات، التسميات، الإفراط في الملاءمة→ واجهة برمجة التطبيقات الموحدة لـ scikit-learn+ 1 دروس أخرى
03
معالجة البيانات المسبقة
→ القيم المفقودة والإكمال→ ترميز المتغيرات الفئوية+ 2 دروس أخرى
04
الانحدار الخاضع للإشراف
→ الانحدار الخطي والتنظيم→ الأشجار وRandomForest للانحدار+ 1 دروس أخرى
05
التصنيف الخاضع للإشراف
→ الانحدار اللوجستي→ k-NN و SVM+ 2 دروس أخرى
06
التعلم غير الخاضع للإشراف
→ التجميع — K-Means, DBSCAN, Agglomerative→ اختيار K الأمثل+ 1 دروس أخرى
07
تقليل الأبعاد
→ PCA — المكونات الرئيسية→ t-SNE و UMAP — التصور غير الخطي+ 1 دروس أخرى
08
التحقق والمعاملات الفائقة
→ التحقق المتقاطع→ GridSearchCV و RandomizedSearchCV+ 1 دروس أخرى
🏁
المشروع النهائي (+ 2 فصول في الطريق)
→ تغادر بمشروع ملموس وقابل للعرض

أول نموذج في 10 أسطر (Iris)

NOTEالهدف — إنشاء أول نموذج تعلم آلة شامل في أقل من 10 أسطر من الكود، على مجموعة بيانات iris التاريخية.

مجموعة بيانات Iris

150 زهرة iris موزعة على 3 أنواع (setosa، versicolor، virginica). 4 ميزات مقاسة: طول وعرض السبلات والبتلات.

output
from sklearn.datasets import load_iris

iris = load_iris()
print("Features :", iris.feature_names)
print("Classes :", iris.target_names)
print("Shape X :", iris.data.shape)   # (150, 4)
print("Shape y :", iris.target.shape) # (150,)

الكود الكامل (10 أسطر)

output
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

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

model = KNeighborsClassifier(n_neighbors=5)
model.fit(X_train, y_train)
score = model.score(X_test, y_test)
print(f"Accuracy : {score:.2%}")  # ~96.7%

هذا كل شيء. لقد أنشأت للتو نموذج تصنيف يميز 3 أنواع من iris بدقة تصل إلى ~97%.

شرح سطرًا سطرًا

السطرالدور
load_iris(return_X_y=True)تحميل X (الميزات) و y (التسميات) مباشرة
train_test_split(...)تقسيم 80% تدريب / 20% اختبار
random_state=42قابلية التكرار (نفس التقسيم دائمًا)
KNeighborsClassifier(...)اختيار الخوارزمية: k-NN مع k=5
model.fit(...)التدريب: حفظ الأمثلة
model.score(...)تقييم الدقة على بيانات الاختبار

إجراء تنبؤ على زهرة جديدة

output
import numpy as np

# زهرة واحدة: سبلة 5.1 × 3.5، بتلة 1.4 × 0.2
nouvelle_fleur = np.array([[5.1, 3.5, 1.4, 0.2]])
prediction = model.predict(nouvelle_fleur)

print("Predit :", iris.target_names[prediction[0]])
# > 'setosa'

# الاحتمالات لكل فئة
proba = model.predict_proba(nouvelle_fleur)
print("Probabilites :", proba)
# > [[1.0, 0.0, 0.0]]  -> 100% setosa

تصور النتيجة

output
import matplotlib.pyplot as plt

fig, axes = plt.subplots(1, 2, figsize=(12, 5))

# التسميات الحقيقية
axes[0].scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap="viridis")
axes[0].set_title("Vraies classes")
axes[0].set_xlabel("Longueur sepale")
axes[0].set_ylabel("Largeur sepale")

# التنبؤات
predictions = model.predict(X_test)
axes[1].scatter(X_test[:, 0], X_test[:, 1], c=predictions, cmap="viridis")
axes[1].set_title("Predictions du modele")
axes[1].set_xlabel("Longueur sepale")

plt.tight_layout()
plt.show()

نمط fit / predict / score

TIPواجهة برمجة موحدة — هذه البنية (fitpredictscore) نفسها لجميع نماذج scikit-learn. بمجرد تعلمها، يمكنك تجربة 30 خوارزمية بتغيير الاستيراد فقط.
output
# نفس الكود، نموذج مختلف:
from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier(random_state=42)
model.fit(X_train, y_train)
print(model.score(X_test, y_test))

# نفس الكود، نموذج آخر:
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
print(model.score(X_test, y_test))

أفضل الممارسات من البداية

WARNINGالفخ — على iris، يعمل كل شيء تقريبًا جيدًا (97%). إنها مجموعة بيانات لعب. في الواقع، ستواجه صعوبات أكبر — وهذا طبيعي!

تحدٍ عملي

TIPتمرين — أعد استخدام كود الـ10 أسطر و:
  1. جرب 3 خوارزميات مختلفة (KNN، DecisionTree، RandomForest)
  2. غيّر random_state وراقب ما إذا كانت النتيجة تتغير
  3. جرب k=1 ثم k=10 في KNeighborsClassifier

حفظ نموذج للإنتاج

NOTEالهدف — الاحتفاظ بنموذج مدرب وإعادة تحميله لاحقًا (API، دفعات، مراقبة).

joblib: الطريقة الموصى بها

output
import joblib

# حفظ
joblib.dump(pipe, "model.joblib")

# تحميل
loaded_pipe = joblib.load("model.joblib")
preds = loaded_pipe.predict(X_new)

مع الضغط

output
# المستوى من 0 (سريع) إلى 9 (أقصى ضغط)
joblib.dump(pipe, "model.joblib.gz", compress=3)
loaded = joblib.load("model.joblib.gz")

pickle (بديل)

output
import pickle

with open("model.pkl", "wb") as f:
    pickle.dump(pipe, f)

with open("model.pkl", "rb") as f:
    pipe = pickle.load(f)
WARNINGjoblib مقابل pickle — joblib أكثر كفاءة لمصفوفات NumPy الكبيرة (وهو ما يميز sklearn). يظل pickle متوافقًا مع كل Python.

الإنتاج: التعبئة الكاملة

output
import joblib
import sklearn
import numpy as np

# حفظ النموذج + البيانات الوصفية
artifact = {
    "model": pipe,
    "feature_names": feature_names,
    "target_names": target_names,
    "sklearn_version": sklearn.__version__,
    "numpy_version": np.__version__,
    "training_date": "2026-05-15",
    "metrics": {"f1": 0.94, "auc": 0.97}
}
joblib.dump(artifact, "model_v1.joblib")

واجهة FastAPI بسيطة

output
from fastapi import FastAPI
from pydantic import BaseModel
import joblib

app = FastAPI()
artifact = joblib.load("model_v1.joblib")
model = artifact["model"]

class Input(BaseModel):
    features: list[float]

@app.post("/predict")
def predict(data: Input):
    pred = model.predict([data.features])
    proba = model.predict_proba([data.features])[0].tolist()
    return {"prediction": int(pred[0]), "probabilities": proba}

الإصدار باستخدام MLflow

output
import mlflow
import mlflow.sklearn

with mlflow.start_run():
    pipe.fit(X_tr, y_tr)
    
    # تسجيل المعاملات، المقاييس، النموذج
    mlflow.log_params({"max_depth": 10, "n_estimators": 200})
    mlflow.log_metric("f1", 0.94)
    mlflow.sklearn.log_model(pipe, "model", registered_model_name="my_model")

ما هو تعلم الآلة؟

NOTEالهدف — فهم ما هو تعلم الآلة، التمييز بين العائلات الثلاث الكبرى (مشرف / غير مشرف / تعزيز)، ومعرفة متى يُستخدم تعلم الآلة مقابل المنطق التقليدي.

تعريف عملي

يتكون تعلم الآلة (أو التعلم الآلي) من بناء برنامج يتعلم أداء مهمة من الأمثلة بدلاً من قواعد مكتوبة يدويًا.

TIPتشبيه — تعليم طفل التعرف على قطة: لا تعطِه قاعدة ("القطة لها 4 أرجل وشوارب...")، بل أره صور قطط حتى يتمكن من التعميم.

متى يُستخدم تعلم الآلة؟

المشكلةالنهج
تحويل الدرجات المئوية إلى فهرنهايتصيغة تقليدية (لا حاجة لتعلم الآلة)
التنبؤ بسعر منزلتعلم آلة مشرف (انحدار)
اكتشاف البريد المزعجتعلم آلة مشرف (تصنيف)
تجميع عملاء متشابهينتعلم آلة غير مشرف (تجميع)
التعرف على وجهالتعلم العميق (نوع من تعلم الآلة)
هزيمة إنسان في الشطرنجتعلم آلة بالتعزيز

العائلات الثلاث لتعلم الآلة

1. المشرف

لدينا بيانات مع تسميات (X، y).

الهدف: التنبؤ بـ y من X.

2. غير المشرف

لدينا بيانات بدون تسميات (X فقط).

الهدف: اكتشاف هياكل مخفية.

3. التعزيز

وكيل يتعلم بالتجربة والخطأ في بيئة.

الهدف: تعظيم المكافأة.

أمثلة ملموسة حسب العائلة

مشرف — انحدار

output
# X: مساحة السكن، عدد الغرف، الحي...
# y: سعر البيع (رقم)
# الهدف: التنبؤ بسعر منزل جديد

مشرف — تصنيف

output
# X: محتوى البريد الإلكتروني
# y: "spam" أو "non-spam" (فئة)
# الهدف: تصنيف بريد إلكتروني جديد

غير مشرف — تجميع

output
# X: مشتريات العملاء (المبلغ، التكرار...)
# لا يوجد y
# الهدف: تجميع في 3-5 شرائح عملاء

سير العمل النموذجي لمشروع تعلم الآلة

WARNINGالفخ الشائع — 80% من الوقت الفعلي لمشروع تعلم الآلة يُخصص للخطوات 2-4 (البيانات)، وليس للتدريب. هذا هو الواقع مقابل الصورة الهوليوودية.

لماذا scikit-learn؟

va-plus-loin

يغطي هذا المقال المقتطفات الأكثر فائدة — الدورة الكاملة Python scikit Learn (10 فصول، 33 درسًا، تمارين مصححة ومشروع نهائي) تأخذك إلى النهاية.

./acceder-au-cours-complet cours gratuit : Maîtriser Claude Code

الأسئلة الشائعة

كم من الوقت يستغرق تعلم Python scikit Learn؟
مع تقدم منظم (10 فصول، 33 درسًا قصيرًا وعمليًا)، يمكن الوصول إلى مستوى تشغيلي في بضعة أسابيع بمعدل 30 إلى 60 دقيقة يوميًا. المهم هو ممارسة كل مفهوم فورًا.
هل هناك متطلبات مسبقة؟
تكفي أساسيات في الحوسبة. إذا كنت تعرف استخدام الطرفية وقراءة كود بسيط، فأنت جاهز.
من أين أبدأ عمليًا؟
أعد إنتاج أوامر هذا المقال، ثم تابع الدورة الكاملة Python scikit Learn: فهي تربط الـ33 درسًا بالترتيب، مع تمارين ومشروع نهائي.

📬 هل تريد تلقي هذا النوع من الأدلة كل أسبوع؟ اشترك مجانًا — كود حقيقي، بدون ثرثرة.