Regresja lasso w pythonie (krok po kroku)
Regresja Lasso 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 lasso ma na celu zminimalizowanie następujących elementów:
RSS + λΣ|β j |
gdzie j przechodzi od 1 do p zmiennych predykcyjnych i λ ≥ 0.
Ten drugi człon równania nazywany jest karą za wycofanie . W regresji lasso 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 lasso w języku Python.
Krok 1: Zaimportuj niezbędne pakiety
Najpierw zaimportujemy niezbędne pakiety, aby wykonać regresję lasso w Pythonie:
import pandas as pd
from numpy import arange
from sklearn. linear_model import LassoCV
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 Lasso
Następnie użyjemy funkcji LassoCV() sklearna, aby dopasować model regresji lasso, i użyjemy 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 LassoCV() 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 = 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
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 lassa do przewidywania nowych obserwacji. 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 lasso do przewidywania wartości hp tej nowej obserwacji:
#define new observation
new = [24, 2.5, 3.5, 18.5]
#predict hp value using lasso regression model
model. predict ([new])
array([105.63442071])
Na podstawie wprowadzonych wartości model przewiduje, że ten samochód będzie miał wartość KM wynoszącą 105,63442071 .
Pełny kod Pythona użyty w tym przykładzie znajdziesz tutaj .