انحدار لاسو في بايثون (خطوة بخطوة)


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

باختصار، يحاول انحدار المربعات الصغرى العثور على تقديرات للمعامل تقلل من مجموع المربعات المتبقية (RSS):

RSS = Σ(ص ط – ŷ ط )2

ذهب:

  • Σ : رمز يوناني يعني المبلغ
  • y i : قيمة الاستجابة الفعلية للملاحظة رقم i
  • ŷ i : قيمة الاستجابة المتوقعة بناءً على نموذج الانحدار الخطي المتعدد

على العكس من ذلك، يسعى انحدار اللاسو إلى تقليل ما يلي:

RSS + Σ|β ي |

حيث تنتقل j من 1 إلى متغيرات التوقع p و ≥ ≥ 0.

يُعرف هذا الحد الثاني في المعادلة بعقوبة الانسحاب . في انحدار اللاسو، نختار قيمة π التي تنتج أقل اختبار ممكن لـ MSE (متوسط مربع الخطأ).

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

الخطوة 1: استيراد الحزم اللازمة

أولاً، سنقوم باستيراد الحزم اللازمة لإجراء انحدار اللاسو في بايثون:

 import pandas as pd
from numpy import arange
from sklearn. linear_model import LassoCV
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: ملاءمة نموذج انحدار Lasso

بعد ذلك، سوف نستخدم وظيفة LassoCV() الخاصة بـ sklearn لملاءمة نموذج انحدار lasso واستخدام وظيفة RepeatedKFold() لإجراء التحقق المتبادل من k-fold للعثور على قيمة ألفا المثالية لاستخدامها في مدة العقوبة.

ملاحظة: يُستخدم المصطلح “alpha” بدلاً من “lambda” في لغة Python.

في هذا المثال، سنختار k = 10 أضعاف ونكرر عملية التحقق المتبادل 3 مرات.

لاحظ أيضًا أن LassoCV() يختبر فقط قيم ألفا 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 = LassoCV(alphas= arange (0, 1, 0.01), cv=cv, n_jobs= -1 )

#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 lasso regression model
model. predict ([new])

array([105.63442071])

وبناء على القيم المدخلة، يتوقع النموذج أن تبلغ قوة هذه السيارة 105.63442071 حصان.

يمكنك العثور على كود Python الكامل المستخدم في هذا المثال هنا .

Add a Comment

ایمئیل یایینلانمایاجاق ایسته‎نیله‎ن بوشلوقلار خاللانمیشدیر *