Regresja grzbietu w pythonie (krok po kroku)
Regresja grzbietowa to metoda, której możemy użyć do dopasowania modelu regresji, gdy w danych występuje wieloliniowość .
W skrócie, regresja metodą najmniejszych kwadratów próbuje znaleźć oszacowania współczynników, które minimalizują rezydualną sumę kwadratów (RSS):
RSS = Σ(y i – ŷ i )2
Złoto:
- Σ : Grecki symbol oznaczający sumę
- y i : rzeczywista wartość odpowiedzi dla i-tej obserwacji
- ŷ i : Przewidywana wartość odpowiedzi na podstawie modelu wielokrotnej regresji liniowej
I odwrotnie, regresja grzbietu ma na celu zminimalizowanie następujących elementów:
RSS + λΣβ j 2
gdzie j przechodzi od 1 do p zmiennych predykcyjnych i λ ≥ 0.
Ten drugi człon równania nazywany jest karą za wycofanie . W regresji grzbietowej wybieramy wartość λ, która daje najniższy możliwy test MSE (średni błąd kwadratowy).
Ten samouczek zawiera przykład krok po kroku wykonywania regresji grzbietu w języku Python.
Krok 1: Zaimportuj niezbędne pakiety
Najpierw zaimportujemy niezbędne pakiety, aby wykonać regresję grzbietową w Pythonie:
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
Krok 2: Załaduj dane
W tym przykładzie użyjemy zbioru danych o nazwie mtcars , który zawiera informacje o 33 różnych samochodach. Użyjemy hp jako zmiennej odpowiedzi i następujących zmiennych jako predyktorów:
- mpg
- waga
- gówno
- sek
Poniższy kod pokazuje, jak załadować i wyświetlić ten zestaw danych:
#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
Krok 3: Dopasuj model regresji grzbietu
Następnie użyjemy funkcji RidgeCV() sklearna do dopasowania modelu regresji grzbietu i funkcji RepeatedKFold() do przeprowadzenia k-krotnej walidacji krzyżowej w celu znalezienia optymalnej wartości alfa do zastosowania dla składnika kary.
Uwaga: w Pythonie zamiast słowa „lambda” używany jest termin „alfa”.
W tym przykładzie wybierzemy k = 10 krotności i powtórzymy proces weryfikacji krzyżowej 3 razy.
Należy również pamiętać, że RidgeCV() domyślnie testuje tylko wartości alfa 0,1, 1 i 10. Możemy jednak ustawić własny zakres alfa od 0 do 1 w przyrostach co 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
Wartość lambda minimalizująca MSE testu okazuje się wynosić 0,99 .
Krok 4: Użyj modelu do przewidywania
Wreszcie możemy użyć ostatecznego modelu regresji grzbietu, aby przewidzieć nowe obserwacje. Na przykład poniższy kod pokazuje, jak zdefiniować nowy samochód z następującymi atrybutami:
- mpg: 24
- waga: 2,5
- cena: 3,5
- sek.: 18,5
Poniższy kod pokazuje, jak używać dopasowanego modelu regresji grzbietu do przewidywania wartości HP tej nowej obserwacji:
#define new observation
new = [24, 2.5, 3.5, 18.5]
#predict hp value using ridge regression model
model. predict ([new])
array([104.16398018])
Na podstawie wprowadzonych wartości model przewiduje, że ten samochód będzie miał wartość KM wynoszącą 104,16398018 .
Pełny kod Pythona użyty w tym przykładzie znajdziesz tutaj .