طَبِّقْهاتعلّم المبدأ، وطبّقه بيدكمقرر 244 · علم البيانات للويب
الدرس 21 · الوحدة 10: تصميم نماذج تعلم الآلة

الانحدار الخطي: تنبؤ رقمي

خطٌّ واحد يلخّص علاقة ويتنبّأ بما لم نره: أول نموذجٍ نبنيه. ⏱ نحو 50 دقيقة.

بعد هذا الدرس ستستطيع أن:
  • تفهم فكرة الخطّ الأقرب للنقاط.
  • تدرّب نموذجًا بخطوات scikit-learn الثلاث.
  • تتنبّأ بقيمٍ جديدة.
  • تقيس الجودة بـ R² و MAE.

١خطٌّ يلخّص العلاقة

أبسط نموذجٍ للتنبؤ برقم: الانحدار الخطّي. يفترض أن الهدف يتغيّر خطّيًّا مع المتغيّر، ويجد الخطّ الأقرب لكل النقاط: y = a·x + b. ثم يتنبّأ لأي x جديد.

main.py
from sklearn.linear_model import LinearRegressionimport numpy as np # بيانات: كل صفحة إضافية ترفع البقاء 3 دقائق (علاقة خطّية)X = np.array([[1], [2], [3], [4], [5]])y = np.array([8, 11, 14, 17, 20])        # y = 3x + 5 model = LinearRegression().fit(X, y)print("الميل (coef):", round(model.coef_[0], 2))print("التقاطع (intercept):", round(model.intercept_, 2))print("تنبّؤ لـ x=6:", round(model.predict([[6]])[0], 1))
Shell×
>>> %Run main.py
الميل (coef): 3.0
التقاطع (intercept): 5.0
تنبّؤ لـ x=6: 23.0
>>>

النموذج استرجع العلاقة: ميل 3، تقاطع 5. وتنبّأ لـ 6 صفحات بـ 23 دقيقة. هكذا يحوّل الأمثلة إلى قاعدةٍ تنبّؤية.

٢واجهة scikit-learn: ثلاث خطوات

كل نماذج scikit-learn تتبع النمط نفسه — تعلّمه مرّةً يكفيك لكل النماذج:

الخطوةالكودالمعنى
1) أنشئmodel = LinearRegression()اختر نوع النموذج
2) درّبmodel.fit(X_train, y_train)تعلّم من الأمثلة
3) تنبّأmodel.predict(X_test)طبّق على جديد
main.py
from sklearn.linear_model import LinearRegressionfrom sklearn.model_selection import train_test_splitimport numpy as np X = np.array([[i] for i in range(1, 21)])y = np.array([2*i + 1 for i in range(1, 21)])   # y = 2x + 1 Xtr, Xte, ytr, yte = train_test_split(X, y, test_size=0.3, random_state=42)model = LinearRegression().fit(Xtr, ytr)print("ميل مُتعلَّم:", round(model.coef_[0], 2))print("تنبّؤ لأول عيّنة اختبار:", round(model.predict(Xte)[0], 1))
Shell×
>>> %Run main.py
ميل مُتعلَّم: 2.0
تنبّؤ لأول عيّنة اختبار: 3.0
>>>

٣قياس جودة الانحدار

كم يقترب الخطّ من الواقع؟ مقياسان: R² (نسبة التباين المُفسَّر، 1 مثاليّ)، ومتوسط الخطأ المطلق MAE (بعدُ التنبؤ عن الحقيقة بوحدة الهدف):

main.py
from sklearn.linear_model import LinearRegressionfrom sklearn.metrics import r2_score, mean_absolute_errorimport numpy as np X = np.array([[1],[2],[3],[4],[5]])y = np.array([8, 11, 14, 17, 20])model = LinearRegression().fit(X, y)pred = model.predict(X)print("R²:", round(r2_score(y, pred), 3))print("MAE:", round(mean_absolute_error(y, pred), 3))
Shell×
>>> %Run main.py
R²: 1.0
MAE: 0.0
>>>

توقّع وتحقّق

الانحدار الخطّي يتنبّأ بـ:

خطوة التعلّم في scikit-learn:

R² = 1 يعني:

للتنبؤ بقيمة جديدة:

الخلاصة

تحدٍّ برمجي: درّب وتنبّأ

متقدم

العلاقة y = 4x + 2. درّب انحدارًا خطّيًّا، واطبع الميل المُتعلَّم، وتنبّؤ النموذج لـ x = 10.

المطلوب:
  • درّب LinearRegression على البيانات.
  • اطبع coef_[0] مقرّبًا، ثم تنبّؤ x=10 مقرّبًا لمنزلة واحدة.

ابدأ من هذا الكود، واضغط ▶ شغّل هنا لتكتب حلّك وتجرّبه مباشرة:

main.py
from sklearn.linear_model import LinearRegressionimport numpy as npX = np.array([[1],[2],[3],[4],[5]])y = np.array([6, 10, 14, 18, 22])     # y = 4x + 2# درّب ثم اطبع الميل وتنبّؤ x=10
المطلوب×
4.0
42.0
💡 تلميح 1
درّب: LinearRegression().fit(X, y).
💡 تلميح 2
الميل model.coef_[0]، والتنبّؤ model.predict([[10]])[0].

حاول بنفسك أولًا؛ للمسألة أكثر من حلّ صحيح.

main.py
from sklearn.linear_model import LinearRegressionimport numpy as npX = np.array([[1],[2],[3],[4],[5]])y = np.array([6, 10, 14, 18, 22])model = LinearRegression().fit(X, y)print(round(model.coef_[0], 1))print(round(model.predict([[10]])[0], 1))
انتقل إلى تقييم الدرساختيار من متعدد، وصح وخطأ، وأكمل الفراغ، وتتبّع الناتج.ابدأ التقييم ←

📝 معلم؟ أرسل ملاحظة للمؤلف عن هذا الدرس