Регресія ласо в python (крок за кроком)
Регресія ласо — це метод, який ми можемо використовувати для підгонки регресійної моделі, коли в даних присутня мультиколінеарність .
У двох словах, регресія методом найменших квадратів намагається знайти оцінки коефіцієнтів, які мінімізують залишкову суму квадратів (RSS):
RSS = Σ(y i – ŷ i )2
золото:
- Σ : грецький символ, що означає суму
- y i : фактичне значення відповіді для i-го спостереження
- ŷ i : прогнозоване значення відповіді на основі моделі множинної лінійної регресії
І навпаки, регресія ласо прагне мінімізувати наступне:
RSS + λΣ|β j |
де j переходить від 1 до p предикторних змінних і λ ≥ 0.
Цей другий член у рівнянні відомий як штраф за вилучення . У ласо-регресії ми вибираємо значення для λ, яке дає найменший можливий тест MSE (середня квадратична помилка).
Цей підручник надає покроковий приклад того, як виконати регресію ласо в Python.
Крок 1. Імпортуйте необхідні пакети
Спочатку ми імпортуємо необхідні пакети для виконання ласо-регресії в Python:
import pandas as pd
from numpy import arange
from sklearn. linear_model import LassoCV
from sklearn. model_selection import RepeatedKFold
Крок 2. Завантажте дані
Для цього прикладу ми використаємо набір даних під назвою mtcars , який містить інформацію про 33 різні автомобілі. Ми будемо використовувати hp як змінну відповіді та наступні змінні як предиктори:
- миль на галлон
- вага
- лайно
- 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: Підберіть регресійну модель ласо
Далі ми використаємо функцію LassoCV() від sklearn, щоб підібрати регресійну модель ласо, і використаємо функцію RepeatedKFold() для виконання k-кратної перехресної перевірки, щоб знайти оптимальне значення альфа для використання для терміну штрафу.
Примітка. Термін «альфа» використовується замість «лямбда» в 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. Використовуйте модель для прогнозування
Нарешті, ми можемо використовувати остаточну регресійну модель ласо, щоб робити прогнози щодо нових спостережень. Наприклад, наведений нижче код показує, як визначити новий автомобіль із такими атрибутами:
- mpg: 24
- вага: 2,5
- ціна: 3,5 грн
- qsec: 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, використаний у цьому прикладі , тут .