Регресія ridge в python (крок за кроком)
Ридж-регресія — це метод, який ми можемо використовувати для підгонки регресійної моделі, коли в даних присутня мультиколінеарність .
У двох словах, регресія методом найменших квадратів намагається знайти оцінки коефіцієнтів, які мінімізують залишкову суму квадратів (RSS):
RSS = Σ(y i – ŷ i )2
золото:
- Σ : грецький символ, що означає суму
- y i : фактичне значення відповіді для i-го спостереження
- ŷ i : прогнозоване значення відповіді на основі моделі множинної лінійної регресії
І навпаки, гребенева регресія прагне мінімізувати наступне:
RSS + λΣβ j 2
де j переходить від 1 до p предикторних змінних і λ ≥ 0.
Цей другий член у рівнянні відомий як штраф за вилучення . У гребеневій регресії ми вибираємо значення для λ, яке дає найменший можливий тест MSE (середня квадратична помилка).
У цьому підручнику наведено покроковий приклад виконання гребневої регресії в Python.
Крок 1. Імпортуйте необхідні пакети
Спочатку ми імпортуємо необхідні пакунки для виконання гребневої регресії в Python:
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 як змінну відповіді та наступні змінні як предиктори:
- миль на галлон
- вага
- лайно
- 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-кратну перехресну перевірку, щоб знайти оптимальне значення альфа для використання для терміну штрафу.
Примітка. Термін «альфа» використовується замість «лямбда» в 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. Використовуйте модель для прогнозування
Нарешті, ми можемо використовувати остаточну регресійну модель хребта, щоб робити прогнози щодо нових спостережень. Наприклад, наведений нижче код показує, як визначити новий автомобіль із такими атрибутами:
- 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 ridge regression model
model. predict ([new])
array([104.16398018])
На основі введених значень модель передбачає, що цей автомобіль матиме значення hp 104,16398018 .
Ви можете знайти повний код Python, використаний у цьому прикладі , тут .