Menu
CoddyTech

Regularisierung

Teil des Abschnitts Überwachtes Lernen der Machine Learning-Journey von Coddy. Lektion 34 von 58.

Ein überangepasstes lineares Modell stützt sich auf große Gewichte, um sich jeder verrauschten Zeile anzupassen. Die Ridge-Regression erhebt eine Strafe für große Gewichte, und alpha legt die Höhe fest.

Hier sind 20 gebrauchte Gitarren und sechs skalierte Merkmale, die den Preis vorhersagen:

Sechs Linien, je ein Gewicht pro Gitarrenmerkmal, in Abhängigkeit von Alpha von 0.01 bis 1000. Zustand beginnt bei 116, Marke bei 104, Alter bei minus 83; alle nähern sich 0, wenn Alpha wächst

Es ist ein Austausch gegenüber LinearRegression, dessen Gewichte [-83. 116. 104. 27. 17. 15.] waren:

from sklearn.linear_model import Ridge

ridge = Ridge(alpha=100)
ridge.fit(X_train, y_train)
print(np.round(ridge.coef_))

Dies gibt Folgendes aus:

[-14.  18.  16.  10.   5.   8.]

Größeres Alpha, kleinere Gewichte, weniger Overfitting. Ist Alpha zu groß, underfittet das Modell.

challenge icon

Aufgabe

Mittel

Ein Ferienhausportal sagt die Preise pro Nacht für Ferienhäuser anhand von 8 Merkmalen voraus und verwendet dafür nur 16 Ferienhäuser. Das Programm liest alpha ein; der Starter-Code teilt die Daten auf und skaliert sie.

  1. Trainiere eine LinearRegression und ein Ridge mit diesem alpha.
  2. Gib die Gesamtgröße der Gewichte jedes Modells aus: Addiere die Beträge der Gewichte und runde das Ergebnis.
  3. Gib für jedes Modell den R-Quadrat-Wert für die Testdaten (3 Dezimalstellen) sowie das bessere Modell aus, wie unten dargestellt.

Für eine andere Region und 5:

Total weight size: plain 90, ridge 53
Test R squared: plain -0.471, ridge 0.642
Better on new cottages: ridge

Probier es selbst

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression, Ridge
from sklearn.metrics import r2_score

alpha = float(input())

# Ändere die folgenden Zeilen nicht: 28 Ferienhäuser, 8 Merkmale und der Preis pro Nacht in Euro
cottages = pd.read_csv("cottages.csv")
features = ["size_m2", "bedrooms", "lake_m", "age_years", "town_km", "sauna", "road_noise_db", "forest_m"]
X = cottages[features]
y = cottages["price"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=0)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

# Schreibe deinen Code unten
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Überwachtes Lernen

Übe selbstständig: Online-Python-Compiler