Ridge-regression in python (schritt für schritt)
Die Ridge-Regression ist eine Methode, mit der wir ein Regressionsmodell anpassen können, wenn in den Daten Multikollinearität vorhanden ist.
Kurz gesagt versucht die Regression der kleinsten Quadrate, Koeffizientenschätzungen zu finden, die die verbleibende Quadratsumme (RSS) minimieren:
RSS = Σ(y i – ŷ i )2
Gold:
- Σ : Ein griechisches Symbol für Summe
- y i : der tatsächliche Antwortwert für die i-te Beobachtung
- ŷ i : Der vorhergesagte Antwortwert basierend auf dem multiplen linearen Regressionsmodell
Umgekehrt versucht die Ridge-Regression Folgendes zu minimieren:
RSS + λΣβ j 2
wobei j von 1 zu p Prädiktorvariablen geht und λ ≥ 0 ist.
Dieser zweite Term in der Gleichung wird als Auszahlungsstrafe bezeichnet. Bei der Ridge-Regression wählen wir einen Wert für λ, der den geringstmöglichen MSE-Test (mittlerer quadratischer Fehler) ergibt.
Dieses Tutorial bietet ein schrittweises Beispiel für die Durchführung einer Ridge-Regression in Python.
Schritt 1: Importieren Sie die erforderlichen Pakete
Zuerst importieren wir die notwendigen Pakete, um die Ridge-Regression in Python durchzuführen:
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
Schritt 2: Daten laden
Für dieses Beispiel verwenden wir einen Datensatz namens mtcars , der Informationen zu 33 verschiedenen Autos enthält. Wir werden hp als Antwortvariable und die folgenden Variablen als Prädiktoren verwenden:
- mpg
- Gewicht
- Scheisse
- qsec
Der folgende Code zeigt, wie dieser Datensatz geladen und angezeigt wird:
#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
Schritt 3: Passen Sie das Ridge-Regressionsmodell an
Als nächstes verwenden wir die RidgeCV()- Funktion von sklearn, um das Ridge-Regressionsmodell anzupassen, und verwenden die RepeatedKFold()- Funktion, um eine k-fache Kreuzvalidierung durchzuführen, um den optimalen Alpha-Wert für den Strafterm zu finden.
Hinweis: In Python wird der Begriff „Alpha“ anstelle von „Lambda“ verwendet.
Für dieses Beispiel wählen wir k = 10-fach und wiederholen den Kreuzvalidierungsprozess dreimal.
Beachten Sie außerdem, dass RidgeCV() standardmäßig nur die Alphawerte 0,1, 1 und 10 testet. Wir können jedoch unseren eigenen Alpha-Bereich in Schritten von 0,01 von 0 bis 1 festlegen:
#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
Der Lambda-Wert, der den MSE des Tests minimiert, beträgt 0,99 .
Schritt 4: Verwenden Sie das Modell, um Vorhersagen zu treffen
Schließlich können wir das endgültige Ridge-Regressionsmodell verwenden, um Vorhersagen über neue Beobachtungen zu treffen. Der folgende Code zeigt beispielsweise, wie ein neues Auto mit den folgenden Attributen definiert wird:
- MPG: 24
- Gewicht: 2,5
- Preis: 3,5
- qsec: 18,5
Der folgende Code zeigt, wie das angepasste Ridge-Regressionsmodell verwendet wird, um den HP- Wert dieser neuen Beobachtung vorherzusagen:
#define new observation
new = [24, 2.5, 3.5, 18.5]
#predict hp value using ridge regression model
model. predict ([new])
array([104.16398018])
Basierend auf den eingegebenen Werten prognostiziert das Modell, dass dieses Auto einen PS- Wert von 104,16398018 haben wird.
Den vollständigen Python-Code, der in diesem Beispiel verwendet wird, finden Sie hier .