الانحدار الخطي: تنبؤ رقمي
خطٌّ واحد يلخّص علاقة ويتنبّأ بما لم نره: أول نموذجٍ نبنيه. ⏱ نحو 50 دقيقة.
- تفهم فكرة الخطّ الأقرب للنقاط.
- تدرّب نموذجًا بخطوات
scikit-learnالثلاث. - تتنبّأ بقيمٍ جديدة.
- تقيس الجودة بـ
R² وMAE.
١خطٌّ يلخّص العلاقة
أبسط نموذجٍ للتنبؤ برقم: الانحدار الخطّي. يفترض أن الهدف يتغيّر خطّيًّا مع المتغيّر، ويجد الخطّ الأقرب لكل النقاط: y = a·x + b. ثم يتنبّأ لأي x جديد.
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))
النموذج استرجع العلاقة: ميل 3، تقاطع 5. وتنبّأ لـ 6 صفحات بـ 23 دقيقة. هكذا يحوّل الأمثلة إلى قاعدةٍ تنبّؤية.
٢واجهة scikit-learn: ثلاث خطوات
كل نماذج scikit-learn تتبع النمط نفسه — تعلّمه مرّةً يكفيك لكل النماذج:
| الخطوة | الكود | المعنى |
|---|---|---|
| 1) أنشئ | model = LinearRegression() | اختر نوع النموذج |
| 2) درّب | model.fit(X_train, y_train) | تعلّم من الأمثلة |
| 3) تنبّأ | model.predict(X_test) | طبّق على جديد |
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))
٣قياس جودة الانحدار
كم يقترب الخطّ من الواقع؟ مقياسان: R² (نسبة التباين المُفسَّر، 1 مثاليّ)، ومتوسط الخطأ المطلق MAE (بعدُ التنبؤ عن الحقيقة بوحدة الهدف):
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))
توقّع وتحقّق
الانحدار الخطّي يتنبّأ بـ:
خطوة التعلّم في scikit-learn:
R² = 1 يعني:
للتنبؤ بقيمة جديدة:
الخلاصة
- الانحدار الخطّي يجد الخطّ
y = a·x + bالأقرب للبيانات ويتنبّأ به. - واجهة
scikit-learnثابتة: أنشئ ←fit←predictلكل النماذج. R² يقيس التباين المُفسَّر (1 مثاليّ)، وMAEبُعد التنبؤ بوحدة الهدف.- الخطّي بسيطٌ وقابلٌ للتفسير؛ نقطة البداية لأي تنبّؤٍ رقميّ.
تحدٍّ برمجي: درّب وتنبّأ
متقدمالعلاقة y = 4x + 2. درّب انحدارًا خطّيًّا، واطبع الميل المُتعلَّم، وتنبّؤ النموذج لـ x = 10.
- درّب
LinearRegressionعلى البيانات. - اطبع
coef_[0]مقرّبًا، ثم تنبّؤx=10مقرّبًا لمنزلة واحدة.
ابدأ من هذا الكود، واضغط ▶ شغّل هنا لتكتب حلّك وتجرّبه مباشرة:
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
💡 تلميح 1
LinearRegression().fit(X, y).💡 تلميح 2
model.coef_[0]، والتنبّؤ model.predict([[10]])[0].حاول بنفسك أولًا؛ للمسألة أكثر من حلّ صحيح.
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))