You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ML-For-Beginners/translations/ar/2-Regression/3-Linear
localizeflow[bot] 4ab4f52666
chore(i18n): sync translations with latest source changes (chunk 1/1, 12 changes)
4 months ago
..
solution chore(i18n): sync translations with latest source changes (chunk 1/1, 300 changes) 6 months ago
README.md chore(i18n): sync translations with latest source changes (chunk 1/1, 12 changes) 4 months ago
assignment.md chore(i18n): sync translations with latest source changes (chunk 1/1, 300 changes) 6 months ago
notebook.ipynb 🌐 Update translations via Co-op Translator 12 months ago

README.md

بناء نموذج الانحدار باستخدام Scikit-learn: الانحدار بأربع طرق

ملاحظة للمبتدئين

يُستخدم الانحدار الخطي عندما نريد التنبؤ بقيمة عددية (على سبيل المثال، سعر المنزل، درجة الحرارة، أو المبيعات).
يعمل عن طريق إيجاد خط مستقيم يمثل أفضل علاقة بين ميزات الإدخال والمخرجات.

في هذا الدرس، نركز على فهم المفهوم قبل استكشاف تقنيات الانحدار الأكثر تقدمًا.
Linear vs polynomial regression infographic

رسم معلوماتي بواسطة داساني ماديبالي

اختبار ما قبل المحاضرة

هذا الدرس متوفر أيضًا بلغة R!

المقدمة

حتى الآن، استكشفت ما هو الانحدار باستخدام بيانات عينة تم جمعها من مجموعة بيانات تسعير اليقطين التي سنستخدمها طوال هذا الدرس. وقد قمت أيضًا بتصويرها باستخدام Matplotlib.

الآن أنت مستعد للتعمق أكثر في الانحدار لتعلم الآلة. بينما يسمح التصوير لفهم البيانات، القوة الحقيقية لتعلم الآلة تأتي من تدريب النماذج. تُدرَّب النماذج على بيانات تاريخية لالتقاط التبعيات تلقائيًا، وتتيح لك التنبؤ بالنتائج لبيانات جديدة لم يسبق للنموذج رؤيتها.

في هذا الدرس، ستتعلم أكثر عن نوعين من الانحدار: الانحدار الخطي الأساسي و_الانحدار المتعدد الحدود_، بالإضافة إلى بعض الأسس الرياضية لهذه التقنيات. هذه النماذج ستسمح لنا بالتنبؤ بأسعار اليقطين بناءً على بيانات الإدخال المختلفة.

ML for beginners - Understanding Linear Regression

🎥 اضغط على الصورة أعلاه لمشاهدة فيديو قصير يشرح الانحدار الخطي.

طوال هذا المنهج، نفترض معرفة رياضية بسيطة، ونسعى لجعلها متاحة للطلاب القادمين من مجالات أخرى، لذا تابع الملاحظات، 🧮 الإشارات، الرسوم التوضيحية، وأدوات التعلم الأخرى للمساعدة في الفهم.

المتطلبات السابقة

يجب أن تكون على دراية الآن ببنية بيانات اليقطين التي نقوم بفحصها. يمكنك العثور عليها محملة ومُنظفة مسبقًا في ملف notebook.ipynb الخاص بهذا الدرس. في الملف، يظهر سعر اليقطين لكل سطل في إطار بيانات جديد. تأكد من قدرتك على تشغيل هذه الدفاتر في بيئات التنفيذ داخل Visual Studio Code.

التحضير

كتذكير، أنت تقوم بتحميل هذه البيانات لطرح أسئلة عليها.

  • متى هو أفضل وقت لشراء اليقطين؟
  • ما السعر الذي يمكنني توقعه لحالة من اليقطين الصغير الحجم؟
  • هل يجب علي شراؤها في سلال نصف السطل أم عبر صندوق سطل وربع السطل؟
    لنواصل الغوص في هذه البيانات.

في الدرس السابق، أنشأت إطار بيانات Pandas وملأته بجزء من مجموعة البيانات الأصلية، مع توحيد الأسعار حسب السطل. ولكن بهذا الشكل، تمكنت فقط من جمع حوالي 400 نقطة بيانات وفقط لأشهر الخريف.

ألقِ نظرة على البيانات التي قمنا بتحميلها مسبقًا في دفتر الملاحظات المصاحب لهذا الدرس. البيانات محملة مسبقًا وتم رسم مخطط مبعثر أولي لعرض بيانات الشهر. ربما يمكننا الحصول على مزيد من التفاصيل حول طبيعة البيانات من خلال تنظيفها أكثر.

خط الانحدار الخطي

كما تعلمت في الدرس 1، الهدف من تمرين الانحدار الخطي هو القدرة على رسم خط لـ:

  • عرض علاقات المتغيرات. عرض العلاقة بين المتغيرات
  • عمل تنبؤات. عمل تنبؤات دقيقة حول مكان وقوع نقطة بيانات جديدة بالنسبة لذلك الخط.

غالبًا ما يتم رسم هذا النوع من الخط ضمن انحدار المربعات الصغرى. يشير مصطلح "المربعات الصغرى" إلى عملية تقليل مجموع الخطأ الكلي في نموذجنا. لكل نقطة بيانات، نقيس المسافة العمودية (المسماة بالبقايا) بين النقطة الفعلية وخط الانحدار.

نقوم بتربيع هذه المسافات لسببين رئيسيين:

  1. الحجم على الاتجاه: نريد معاملة الخطأ -5 بنفس الطريقة كخطأ +5. التربيع يحول كل القيم إلى موجبة.

  2. معاقبة القيم المتطرفة: التربيع يعطي وزنًا أكبر للأخطاء الكبيرة، مما يجبر الخط على البقاء أقرب إلى النقاط البعيدة.

ثم نجمع كل هذه القيم المربعة معًا. هدفنا هو العثور على الخط المحدد حيث يكون مجموع هذه القيم في أقل مستوى له (القيمة الصغرى الممكنة) — ومن هنا جاء اسم "المربعات الصغرى".

🧮 أرني الرياضيات

يمكن التعبير عن هذا الخط، الذي يسمى خط الانسب، بواسطة معادلة:

Y = a + bX

حيث X هي 'المتغير التفسيري'. و Y هو 'المتغير التابع'. ميل الخط هو b و a هو الجزء المقطوع من المحور الصادي، والذي يشير إلى قيمة Y عندما يكون X = 0.

calculate the slope

أولًا، احسب الميل b. رسم معلوماتي من جن لوبر

بمعنى آخر، وبالرجوع لسؤال بيانات اليقطين الأصلي: "التنبؤ بسعر اليقطين لكل سطل حسب الشهر"، يشير X إلى السعر وY إلى شهر البيع.

complete the equation

احسب قيمة Y. إن كنت تدفع حوالي 4 دولارات، فلا بد أن يكون أبريل! رسم معلوماتي من جن لوبر

الرياضيات التي تحسب الخط يجب أن تبرز ميل الخط، والذي يعتمد أيضًا على الجزء المقطوع، أو مكان وجود Y عندما X = 0.

يمكنك الاطلاع على طريقة الحساب لهذه القيم على موقع Math is Fun. كما زر حاسبة المربعات الصغرى لمشاهدة تأثير قيم الأرقام على الخط.

الترابط

مصطلح آخر يجب فهمه هو معامل الترابط بين المتغيرات X و Y المعطاة. باستخدام مخطط مبعثر، يمكنك تصور هذا المعامل بسرعة. المخطط الذي تتوزع نقاط بياناته في خط مرتب له ترابط عالٍ، بينما المخطط الذي تتوزع نقاطه في كل مكان بين X و Y له ترابط منخفض.

نموذج الانحدار الخطي الجيد هو الذي يمتلك معامل ترابط عالٍ (أقرب إلى 1 منه إلى 0) باستخدام طريقة انحدار المربعات الصغرى وخط الانحدار.

شغل دفتر الملاحظات المصاحب لهذا الدرس وانظر إلى المخطط المبعثر بين الشهر والسعر. هل تبدو البيانات المرتبطة بين الشهر والسعر لمبيعات اليقطين ذات ترابط عالي أم منخفض، حسب تفسيرك البصري للمخطط المبعثر؟ هل يتغير ذلك إذا استخدمت قياسًا أكثر دقة بدلًا من Month، كمثال يوم السنة (أي عدد الأيام منذ بداية السنة)؟

في الكود أدناه، سنفترض أننا قمنا بتنظيف البيانات، وحصلنا على إطار بيانات يسمى new_pumpkins، مشابه للآتي:

ID Month DayOfYear Variety City Package Low Price High Price Price
70 9 267 PIE TYPE BALTIMORE 1 1/9 bushel cartons 15.0 15.0 13.636364
71 9 267 PIE TYPE BALTIMORE 1 1/9 bushel cartons 18.0 18.0 16.363636
72 10 274 PIE TYPE BALTIMORE 1 1/9 bushel cartons 18.0 18.0 16.363636
73 10 274 PIE TYPE BALTIMORE 1 1/9 bushel cartons 17.0 17.0 15.454545
74 10 281 PIE TYPE BALTIMORE 1 1/9 bushel cartons 15.0 15.0 13.636364

الشفرة الخاصة بتنظيف البيانات متوفرة في notebook.ipynb. لقد قمنا بنفس خطوات التنظيف كالدرس السابق، وحسبنا عمود DayOfYear باستخدام التعبير التالي:

day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days)

الآن بعد أن أصبحت تفهم الرياضيات وراء الانحدار الخطي، دعونا ننشئ نموذج انحدار لنرى ما إذا كان بإمكاننا التنبؤ بأفضل عبوة من اليقطين التي ستحصل على أفضل الأسعار. قد يرغب شخص يشتري يقطينًا لزراعة بقعة هالوين في معرفة هذه المعلومات ليتمكن من تحسين مشترياته.

البحث عن الترابط

ML for beginners - Looking for Correlation: The Key to Linear Regression

🎥 اضغط على الصورة أعلاه لمشاهدة فيديو قصير حول الترابط.

من الدرس السابق، ربما لاحظت أن متوسط السعر للأشهر المختلفة يبدو كالتالي:

Average price by month

هذا يشير إلى أنه يجب أن يكون هناك بعض الترابط، ويمكننا محاولة تدريب نموذج انحدار خطي للتنبؤ بالعلاقة بين Month و Price، أو بين DayOfYear و Price. إليك المخطط المبعثر الذي يظهر العلاقة الأخيرة:

Scatter plot of Price vs. Day of Year

لنرَ ما إذا كان هناك ترابط باستخدام دالة corr:

print(new_pumpkins['Month'].corr(new_pumpkins['Price']))
print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price']))

يبدو أن الترابط صغير إلى حدٍّ ما، -0.15 بالنسبة لـ Month و -0.17 بالنسبة لـ DayOfMonth، لكن قد يكون هناك علاقة مهمة أخرى. يبدو أن هناك تجمعات مختلفة من الأسعار تتوافق مع أصناف مختلفة من اليقطين. لتأكيد هذا الفرض، دعنا نرسم كل فئة من اليقطين بلون مختلف. بتمرير معامل ax إلى دالة scatter نتمكن من رسم كل النقاط على نفس الرسم:

ax=None
colors = ['red','blue','green','yellow']
for i,var in enumerate(new_pumpkins['Variety'].unique()):
    df = new_pumpkins[new_pumpkins['Variety']==var]
    ax = df.plot.scatter('DayOfYear','Price',ax=ax,c=colors[i],label=var)
Scatter plot of Price vs. Day of Year

تحقيقنا يشير إلى أن الصنف له تأثير أكبر على السعر الكلي من تاريخ البيع الفعلي. يمكننا رؤية ذلك من خلال رسم بياني شريطي:

new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar')
Bar graph of price vs variety

دعنا نركز للحظة على صنف واحد من اليقطين، وهو 'نوع الفطيرة'، ولنرى تأثير التاريخ في السعر:

pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE']
pie_pumpkins.plot.scatter('DayOfYear','Price') 
Scatter plot of Price vs. Day of Year

إذا حسبنا الآن الترابط بين Price و DayOfYear باستخدام دالة corr، سنحصل على تقريبًا -0.27 - مما يعني أن تدريب نموذج تنبؤي يصبح منطقيًا.

قبل تدريب نموذج الانحدار الخطي، من المهم التأكد من أن بياناتنا نظيفة. الانحدار الخطي لا يعمل جيدًا مع القيم المفقودة، لذا من المنطقي إزالة جميع الخلايا الفارغة:

pie_pumpkins.dropna(inplace=True)
pie_pumpkins.info()

من الشائع ملء القيم الفارغة بالقيمة المتوسطة للعمود المقابل.

الانحدار الخطي البسيط

ML for beginners - Linear and Polynomial Regression using Scikit-learn

🎥 اضغط على الصورة أعلاه لمشاهدة فيديو قصير يشرح الانحدار الخطي والانحدار متعددة الحدود.

لتدريب نموذج الانحدار الخطي، سنستخدم مكتبة Scikit-learn.

from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split

نبدأ بفصل قيم الإدخال (الميزات) والنتيجة المتوقعة (التسمية) في مصفوفات numpy منفصلة:

X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1)
y = pie_pumpkins['Price']

لاحظ أننا اضطررنا لأداء reshape على البيانات المدخلة لكي تفهم حزمة الانحدار الخطي البيانات بشكل صحيح. الانحدار الخطي يتوقع مصفوفة ذات بعدين كإدخال، حيث كل صف من المصفوفة يمثل متجهًا لميزات الإدخال. في حالتنا، حيث لدينا مدخل واحد فقط - نحتاج إلى مصفوفة بحجم N×1، حيث N هو حجم مجموعة البيانات.

بعدها، نحتاج إلى تقسيم البيانات إلى مجموعات تدريب واختبار، حتى نستطيع التحقق من نموذجنا بعد التدريب:

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

أخيرًا، تدريب نموذج الانحدار الخطي الفعلي يحتاج فقط إلى سطرين من الكود. نعرّف كائن LinearRegression، ثم نلائم النموذج على بياناتنا باستخدام دالة fit:

lin_reg = LinearRegression()
lin_reg.fit(X_train,y_train)

يحتوي كائن LinearRegression بعد عملية fit على جميع معاملات الانحدار، والتي يمكن الوصول إليها باستخدام الخاصية .coef_. في حالتنا، يوجد معامل واحد فقط، والذي يجب أن يكون حوالي -0.017. هذا يعني أن الأسعار تبدو وكأنها تنخفض قليلاً مع مرور الوقت، ولكن ليس بشكل كبير، حوالي سنتين في اليوم. يمكننا أيضًا الوصول إلى نقطة التقاطع مع محور Y باستخدام lin_reg.intercept_ - والتي ستكون حوالي 21 في حالتنا، مما يشير إلى السعر في بداية السنة.

لمعرفة مدى دقة نموذجنا، يمكننا توقع الأسعار على مجموعة البيانات الاختبارية، ثم قياس مدى قرب تنبؤاتنا من القيم المتوقعة. يمكن القيام بذلك باستخدام مقياس جذر متوسط مربعات الخطأ (RMSE)، وهو الجذر التربيعي لمتوسط كل الفروق المربعة بين القيمة المتوقعة والقيمة المتنبأ بها.

pred = lin_reg.predict(X_test)

rmse = np.sqrt(mean_squared_error(y_test,pred))
print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)')

يبدو أن خطأنا حوالي نقطتين، وهو ~17%. ليس جيدًا جدًا. مؤشر آخر لجودة النموذج هو معامل التحديد، والذي يمكن الحصول عليه بهذه الطريقة:

score = lin_reg.score(X_train,y_train)
print('Model determination: ', score)

إذا كانت القيمة 0، فهذا يعني أن النموذج لا يأخذ بيانات الإدخال في الاعتبار، ويتصرف كـ أسوأ متنبئ خطي، والذي هو ببساطة متوسط ​​القيمة للنتيجة. القيمة 1 تعني أننا نستطيع التنبؤ بجميع المخرجات المتوقعة بشكل مثالي. في حالتنا، المعامل حوالي 0.06، وهو منخفض إلى حد ما.

يمكننا أيضًا رسم بيانات الاختبار مع خط الانحدار لرؤية كيفية عمل الانحدار في حالتنا بشكل أفضل:

plt.scatter(X_test,y_test)
plt.plot(X_test,pred)
Linear regression

الانحدار متعدد الحدود

نوع آخر من الانحدار الخطي هو الانحدار متعدد الحدود. بينما في بعض الأحيان هناك علاقة خطية بين المتغيرات - كلما كانت القرعة أكبر من حيث الحجم، كلما كان السعر أعلى - أحيانًا لا يمكن تمثيل هذه العلاقات كمسطح أو خط مستقيم.

إليك بعض الأمثلة الأخرى على بيانات يمكن استخدام الانحدار متعدد الحدود لها

ألق نظرة أخرى على العلاقة بين التاريخ والسعر. هل يبدو أن هذا المخطط النقطي يجب بالضرورة تحليله بخط مستقيم؟ ألا يمكن للأسعار أن تتقلب؟ في هذه الحالة، يمكنك تجربة الانحدار متعدد الحدود.

متعددات الحدود هي تعبيرات رياضية قد تتكون من متغير أو أكثر ومعاملات

ينشئ الانحدار متعدد الحدود خط منحني ليناسب البيانات غير الخطية بشكل أفضل. في حالتنا، إذا قمنا بتضمين متغير DayOfYear مربع في بيانات الإدخال، يجب أن نتمكن من ملائمة بياناتنا بمنحنى قطع مكافئ، سيكون له أدنى نقطة في نقطة معينة خلال السنة.

تتضمن مكتبة Scikit-learn واجهة برمجة تطبيقات مفيدة تسمى pipeline لدمج خطوات معالجة البيانات المختلفة معًا. الخط الأنبوبي هو سلسلة من المقدرون. في حالتنا، سوف ننشئ خطًا أنبوبيًا يضيف مميزات متعددة الحدود إلى نموذجنا أولاً، ثم يقوم بتدريب الانحدار:

from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline

pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())

pipeline.fit(X_train,y_train)

استخدام PolynomialFeatures(2) يعني أننا سوف نضمّن جميع كثيرات الحدود من الدرجة الثانية من بيانات الإدخال. في حالتنا، سيعني هذا فقط DayOfYear2، ولكن إذا كان هناك متغيران للإدخال X و Y، فسيضيف هذا X2، XY، و Y2. يمكننا أيضًا استخدام كثيرات حدود بدرجات أعلى إذا أردنا.

يمكن استخدام الخطوط الأنبوبية بنفس طريقة كائن LinearRegression الأصلي، أي يمكننا fit الخط الأنبوبي، ثم استخدام predict للحصول على نتائج التنبؤ. هنا الرسم البياني الذي يعرض بيانات الاختبار ومنحنى التقريب:

Polynomial regression

باستخدام الانحدار متعدد الحدود، يمكننا الحصول على MSE أقل قليلاً ومعامل تحديد أعلى، لكن ليس بشكل كبير. نحن بحاجة إلى أخذ ميزات أخرى في الاعتبار!

يمكنك رؤية أن أدنى أسعار القرع تُلاحظ في مكان ما حول عيد الهالوين. كيف يمكنك تفسير ذلك؟

🎃 تهانينا، لقد أنشأت نموذجًا يمكنه المساعدة في توقع سعر قرع الفطائر. ربما يمكنك تكرار نفس الإجراء لجميع أنواع القرع، لكن ذلك سيكون شاقًا. دعنا نتعلم الآن كيفية أخذ نوع القرع في الاعتبار في نموذجنا!

الميزات الفئوية

في العالم المثالي، نريد أن نكون قادرين على التنبؤ بالأسعار لأنواع مختلفة من القرع باستخدام نفس النموذج. ومع ذلك، فإن عمود Variety يختلف قليلاً عن الأعمدة مثل Month، لأنه يحتوي على قيم غير رقمية. تُسمى هذه الأعمدة الفئوية.

ML للمبتدئين - التنبؤ بالميزات الفئوية باستخدام الانحدار الخطي

🎥 انقر على الصورة أعلاه لمشاهدة نظرة عامة قصيرة على استخدام الميزات الفئوية.

هنا يمكنك رؤية كيف يعتمد متوسط السعر على النوع:

Average price by variety

لأخذ النوع في الاعتبار، نحتاج أولاً إلى تحويله إلى شكل رقمي، أو ترميزه. هناك عدة طرق يمكننا القيام بها:

  • ترميز رقمي بسيط سيبني جدولًا لأنواع مختلفة، ثم يستبدل اسم النوع بمؤشر في ذلك الجدول. هذه ليست أفضل فكرة للانحدار الخطي، لأن الانحدار الخطي يأخذ القيمة الرقمية الفعلية للمؤشر، ويضيفها إلى النتيجة مضروبة في بعض المعاملات. في حالتنا، العلاقة بين رقم المؤشر والسعر واضحة غير خطية، حتى لو تأكدنا من أن المؤشرات مرتبة بطريقة معينة.
  • الترميز أحادي التواجد (one-hot encoding) سيستبدل عمود Variety بأربعة أعمدة مختلفة، واحد لكل نوع. يحتوي كل عمود على 1 إذا كان الصف المقابل من ذلك النوع، و 0 خلاف ذلك. هذا يعني أن هناك أربعة معاملات في الانحدار الخطي، واحد لكل نوع قرع، مسؤول عن "السعر الابتدائي" (أو بالأحرى "السعر الإضافي") لذلك النوع المحدد.

يُظهر الكود أدناه كيفية ترميز النوع باستخدام الترميز أحادي التواجد:

pd.get_dummies(new_pumpkins['Variety'])
ID FAIRYTALE MINIATURE MIXED HEIRLOOM VARIETIES PIE TYPE
70 0 0 0 1
71 0 0 0 1
... ... ... ... ...
1738 0 1 0 0
1739 0 1 0 0
1740 0 1 0 0
1741 0 1 0 0
1742 0 1 0 0

لتدريب الانحدار الخطي باستخدام النوع المشفر بأحادي التواجد كإدخال، نحتاج فقط إلى تهيئة بيانات X و y بشكل صحيح:

X = pd.get_dummies(new_pumpkins['Variety'])
y = new_pumpkins['Price']

بقية الكود هو نفسه الذي استخدمناه أعلاه لتدريب الانحدار الخطي. إذا جربته، سترى أن متوسط مربع الخطأ مماثل تقريبًا، لكننا نحصل على معامل تحديد أعلى بكثير (~77%). للحصول على توقعات أكثر دقة، يمكننا أخذ المزيد من الميزات الفئوية والعوامل الرقمية في الاعتبار، مثل Month أو DayOfYear. للحصول على مصفوفة واسعة من الميزات، يمكننا استخدام join:

X = pd.get_dummies(new_pumpkins['Variety']) \
        .join(new_pumpkins['Month']) \
        .join(pd.get_dummies(new_pumpkins['City'])) \
        .join(pd.get_dummies(new_pumpkins['Package']))
y = new_pumpkins['Price']

هنا نأخذ أيضًا في الاعتبار City ونوع Package، والذي يعطينا MSE=2.84 (10%)، ومعامل تحديد 0.94!

تجميع كل شيء معًا

لإنشاء أفضل نموذج، يمكننا استخدام البيانات المجمعة (المشفرة أحادي التواجد + الرقمية) من المثال أعلاه مع الانحدار متعدد الحدود. هنا الكود الكامل لراحتك:

# إعداد بيانات التدريب
X = pd.get_dummies(new_pumpkins['Variety']) \
        .join(new_pumpkins['Month']) \
        .join(pd.get_dummies(new_pumpkins['City'])) \
        .join(pd.get_dummies(new_pumpkins['Package']))
y = new_pumpkins['Price']

# إجراء تقسيم التدريب والاختبار
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

# إعداد وتدريب خط الأنابيب
pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
pipeline.fit(X_train,y_train)

# توقع النتائج لبيانات الاختبار
pred = pipeline.predict(X_test)

# حساب متوسط مربع الخطأ والتحديد
mse = np.sqrt(mean_squared_error(y_test,pred))
print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')

score = pipeline.score(X_train,y_train)
print('Model determination: ', score)

يجب أن يعطينا هذا أفضل معامل تحديد يقارب 97%، و MSE=2.23 (~8% خطأ في التنبؤ).

النموذج MSE معامل التحديد
DayOfYear خطي 2.77 (17.2%) 0.07
DayOfYear متعدد الحدود 2.73 (17.0%) 0.08
Variety خطي 5.24 (19.7%) 0.77
كل الميزات خطي 2.84 (10.5%) 0.94
كل الميزات متعدد الحدود 2.23 (8.25%) 0.97

🏆 أحسنت! لقد أنشأت أربعة نماذج انحدار في درس واحد، وحسنت جودة النموذج إلى 97%. في القسم النهائي عن الانحدار، ستتعلم عن الانحدار اللوجستي لتحديد الفئات.


🚀التحدي

اختبر عدة متغيرات مختلفة في هذا الدفتر لترى كيف تتناسب الارتباطات مع دقة النموذج.

اختبار ما بعد المحاضرة

مراجعة ودراسة ذاتية

في هذا الدرس تعلمنا عن الانحدار الخطي. هناك أنواع أخرى مهمة من الانحدار. اقرأ عن تقنيات Stepwise، Ridge و Lasso و Elasticnet. دورة جيدة للدراسة والتعلم أكثر هي دورة Stanford Statistical Learning

التعيين

إنشاء نموذج


تنويه:
تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية Co-op Translator. بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار النسخة الأصلية من المستند بلغتها الأصلية المصدر الأساسي والموثوق. للحصول على معلومات هامة، يُنصح بالترجمة الاحترافية البشرية. نحن غير مسؤولين عن أي سوء فهم أو تفسير ناتج عن استخدام هذه الترجمة.