Ridge-regressie in python (stap voor stap)


Ridge-regressie is een methode die we kunnen gebruiken om een regressiemodel te fitten wanneer multicollineariteit in de gegevens aanwezig is.

In een notendop probeert regressie met de kleinste kwadraten coëfficiëntschattingen te vinden die de resterende som van de kwadraten (RSS) minimaliseren:

RSS = Σ(y i – ŷ i )2

Goud:

  • Σ : Een Grieks symbool dat som betekent
  • y i : de werkelijke responswaarde voor de i-de waarneming
  • ŷ i : De voorspelde responswaarde op basis van het meervoudige lineaire regressiemodel

Omgekeerd probeert nokregressie het volgende te minimaliseren:

RSS + λΣβ j 2

waarbij j van 1 naar p voorspellende variabelen gaat en λ ≥ 0.

Deze tweede term in de vergelijking staat bekend als de opnameboete . Bij nokregressie selecteren we een waarde voor λ die de laagst mogelijke MSE-test oplevert (gemiddelde kwadratische fout).

Deze zelfstudie biedt een stapsgewijs voorbeeld van hoe u ridge-regressie in Python uitvoert.

Stap 1: Importeer de benodigde pakketten

Eerst zullen we de benodigde pakketten importeren om ridge-regressie in Python uit te voeren:

 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

Stap 2: Gegevens laden

Voor dit voorbeeld gebruiken we een dataset met de naam mtcars , die informatie bevat over 33 verschillende auto’s. We zullen hp gebruiken als de responsvariabele en de volgende variabelen als voorspellers:

  • mpg
  • gewicht
  • shit
  • qsec

De volgende code laat zien hoe u deze gegevensset laadt en weergeeft:

 #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

Stap 3: Pas het Ridge Regressiemodel toe

Vervolgens zullen we de functie RidgeCV() van sklearn gebruiken om het ridge-regressiemodel aan te passen en de functie RepeatedKFold() gebruiken om k-voudige kruisvalidatie uit te voeren om de optimale alfawaarde te vinden die voor de strafterm kan worden gebruikt.

Opmerking: in Python wordt de term ‚alpha‘ gebruikt in plaats van ‚lambda‘.

Voor dit voorbeeld kiezen we k = 10 vouwen en herhalen we het kruisvalidatieproces drie keer.

Merk ook op dat RidgeCV() standaard alleen alfawaarden 0,1, 1 en 10 test. We kunnen echter ons eigen alfabereik instellen van 0 tot 1 in stappen van 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

De lambdawaarde die de MSE van de test minimaliseert blijkt 0,99 te zijn.

Stap 4: Gebruik het model om voorspellingen te doen

Ten slotte kunnen we het Final Ridge Regressiemodel gebruiken om voorspellingen te doen over nieuwe waarnemingen. De volgende code laat bijvoorbeeld zien hoe u een nieuwe auto definieert met de volgende kenmerken:

  • mpg: 24
  • gewicht: 2,5
  • prijs: 3,5
  • qsec: 18,5

De volgende code laat zien hoe u het gepaste nokregressiemodel kunt gebruiken om de pk- waarde van deze nieuwe waarneming te voorspellen:

 #define new observation
new = [24, 2.5, 3.5, 18.5]

#predict hp value using ridge regression model
model. predict ([new])

array([104.16398018])

Op basis van de ingevoerde waarden voorspelt het model dat deze auto een pk- waarde zal hebben van 104,16398018 .

Je kunt de volledige Python-code die in dit voorbeeld wordt gebruikt hier vinden.

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert