Menu
CoddyTech

Regolarizzazione

Fa parte della sezione Apprendimento supervisionato del percorso Machine Learning di Coddy. Lezione 34 di 58.

Un modello lineare sovradattato si affida a pesi elevati per adattarsi a ogni riga rumorosa. La regressione Ridge applica una penalità ai pesi elevati e alpha ne stabilisce il costo.

Ecco 20 chitarre usate e sei caratteristiche ridimensionate che predicono il prezzo:

Sei linee, un peso per ogni caratteristica della chitarra, in funzione di alfa da 0.01 a 1000. Le condizioni iniziano da 116, la marca da 104, l'età da meno 83; tutte si avvicinano a 0 all'aumentare di alfa

È a una sola sostituzione da LinearRegression, i cui pesi erano [-83. 116. 104. 27. 17. 15.]:

from sklearn.linear_model import Ridge

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

Questo stampa:

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

Un valore più grande di alpha, pesi più piccoli, meno overfitting. Se è troppo grande, il modello è soggetto a underfitting.

challenge icon

Sfida

Medio

Un sito turistico prevede i prezzi dei cottage per notte usando 8 caratteristiche e solo 16 cottage. Il programma legge alpha; il codice iniziale divide e ridimensiona i dati.

  1. Adatta un modello LinearRegression e uno Ridge con quel valore di alpha.
  2. Stampa la dimensione totale dei pesi di ciascun modello: i pesi senza segno, sommati e arrotondati.
  3. Stampa ciascun R quadrato sul test (3 decimali) e il modello migliore, come sotto.

Per un'altra regione e 5:

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

Provalo tu

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())

# No cambies las líneas siguientes: 28 casas de vacaciones, 8 características y el precio por noche en euros
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)

# Escribe tu código a continuación
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Apprendimento supervisionato

Esercitati da solo: Compilatore Python online