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:
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.
Aufgabe
MittelEin 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.
- Trainiere eine
LinearRegressionund einRidgemit diesemalpha. - Gib die Gesamtgröße der Gewichte jedes Modells aus: Addiere die Beträge der Gewichte und runde das Ergebnis.
- 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: ridgeProbier 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
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Überwachtes Lernen
1Dein erstes Modell
Aus Beispielen lernenTrainings- und TestdatensätzeAnpassen und VorhersagenEin Modell bewertenRückblick: Saatgutsortierer4Logistische Regression
Ja-Nein-VorhersagenDie EntscheidungsschwelleGewichte als IndizienMehrere KlassenRückblick: Spamfilter7Überanpassung
Unter- und ÜberanpassungLernkurvenRegularisierungValidierungssetsRückblick: Einen Baum optimieren2Nächste Nachbarn
So entscheidet k-NNk wählenEntscheidungsgrenzenSkalierung für NachbarnRückblick: Wein-Nachbarn5Klassifikatoren bewerten
Die KonfusionsmatrixPräzision und TrefferquoteDer F1-ScoreUnausgewogene KlassenROC-KurvenRückblick: Screeningtest3Lineare Regression
Zahlen vorhersagenMehrere MerkmaleFehler messenResiduenplotsZusammenfassung: Fahrradverleih6Entscheidungsbäume
Bäume stellen FragenEinen Baum lesenBaumtiefeMerkmalswichtigkeitRückblick: Kreditentscheidungen9Ensembleverfahren
Random ForestsWarum Random Forests funktionierenGradient BoostingRückblick: Förster des Waldes12Abschließende Herausforderungen
Diabetes-FortschrittKreditgenehmigungHandgeschriebene ZiffernKundenabwanderungÜbe selbstständig: Online-Python-Compiler