انحدار ريدج في بايثون (خطوة بخطوة)
يعد انحدار ريدج طريقة يمكننا استخدامها لتناسب نموذج الانحدار عند وجود علاقة خطية متعددة في البيانات.
باختصار، يحاول انحدار المربعات الصغرى العثور على تقديرات للمعامل تقلل من مجموع المربعات المتبقية (RSS):
RSS = Σ(ص ط – ŷ ط )2
ذهب:
- Σ : رمز يوناني يعني المبلغ
- y i : قيمة الاستجابة الفعلية للملاحظة رقم i
- ŷ i : قيمة الاستجابة المتوقعة بناءً على نموذج الانحدار الخطي المتعدد
على العكس من ذلك، يسعى انحدار ريدج إلى تقليل ما يلي:
آر إس إس + Σβ ي 2
حيث تنتقل j من 1 إلى متغيرات التوقع p و ≥ ≥ 0.
يُعرف هذا الحد الثاني في المعادلة بعقوبة الانسحاب . في انحدار التلال، نختار قيمة π التي تنتج أقل اختبار MSE ممكن (متوسط مربع الخطأ).
يقدم هذا البرنامج التعليمي مثالاً خطوة بخطوة لكيفية تنفيذ انحدار التلال في بايثون.
الخطوة 1: استيراد الحزم اللازمة
أولاً، سنقوم باستيراد الحزم اللازمة لتنفيذ انحدار التلال في بايثون:
import pandas as pd
from numpy import arange
from sklearn. linear_model import Ridge
from sklearn. linear_model import RidgeCV
from sklearn. model_selection import RepeatedKFold
الخطوة 2: تحميل البيانات
في هذا المثال، سنستخدم مجموعة بيانات تسمى mtcars ، والتي تحتوي على معلومات عن 33 سيارة مختلفة. سوف نستخدم hp كمتغير الاستجابة والمتغيرات التالية كتنبؤات:
- ميلا في الغالون
- وزن
- القرف
- com.qsec
يوضح الكود التالي كيفية تحميل مجموعة البيانات هذه وعرضها:
#define URL where data is located
url = "https://raw.githubusercontent.com/- Statorials/Python-Guides/main/mtcars.csv"
#read in data
data_full = pd. read_csv (url)
#select subset of data
data = data_full[["mpg", "wt", "drat", "qsec", "hp"]]
#view first six rows of data
data[0:6]
mpg wt drat qsec hp
0 21.0 2.620 3.90 16.46 110
1 21.0 2.875 3.90 17.02 110
2 22.8 2.320 3.85 18.61 93
3 21.4 3.215 3.08 19.44 110
4 18.7 3,440 3.15 17.02 175
5 18.1 3.460 2.76 20.22 105
الخطوة 3: تناسب نموذج انحدار ريدج
بعد ذلك، سوف نستخدم وظيفة RidgeCV () الخاصة بـ sklearn لتناسب نموذج انحدار التلال ونستخدم وظيفة RepeatedKFold () لإجراء التحقق المتبادل من k-fold للعثور على قيمة ألفا المثالية لاستخدامها في مدة العقوبة.
ملاحظة: يُستخدم المصطلح “alpha” بدلاً من “lambda” في لغة Python.
في هذا المثال، سنختار k = 10 أضعاف ونكرر عملية التحقق المتبادل 3 مرات.
لاحظ أيضًا أن RidgeCV() يختبر فقط قيم ألفا 0،1، 1، و10 افتراضيًا. ومع ذلك، يمكننا ضبط نطاق ألفا الخاص بنا من 0 إلى 1 بزيادات قدرها 0.01:
#define predictor and response variables
X = data[["mpg", "wt", "drat", "qsec"]]
y = data["hp"]
#define cross-validation method to evaluate model
cv = RepeatedKFold(n_splits= 10 , n_repeats= 3 , random_state= 1 )
#define model
model = RidgeCV(alphas= arange (0, 1, 0.01), cv=cv, scoring=' neg_mean_absolute_error ')
#fit model
model. fit (x,y)
#display lambda that produced the lowest test MSE
print( model.alpha_ )
0.99
وتبين أن قيمة لامدا التي تقلل من MSE للاختبار هي 0.99 .
الخطوة 4: استخدم النموذج لعمل تنبؤات
وأخيرًا، يمكننا استخدام نموذج انحدار التلال النهائي لإجراء تنبؤات حول الملاحظات الجديدة. على سبيل المثال، يوضح الكود التالي كيفية تعريف سيارة جديدة بالصفات التالية:
- ميلا في الغالون: 24
- الوزن: 2.5
- السعر: 3.5
- كيو سيك: 18.5
يوضح الكود التالي كيفية استخدام نموذج انحدار التلال المجهز للتنبؤ بقيمة HP لهذه الملاحظة الجديدة:
#define new observation
new = [24, 2.5, 3.5, 18.5]
#predict hp value using ridge regression model
model. predict ([new])
array([104.16398018])
وبناءً على القيم المدخلة، يتوقع النموذج أن تبلغ قوة هذه السيارة 104.16398018 حصانًا.
يمكنك العثور على كود Python الكامل المستخدم في هذا المثال هنا .