Menu
CoddyTech

Regularyzacja

Część sekcji Uczenie nadzorowane ścieżki Machine Learning w Coddy. Lekcja 34 z 58.

Model liniowy nadmiernie dopasowany do danych opiera się na dużych wagach, by dopasować się do każdego zaszumionego wiersza. Regresja grzbietowa nakłada karę za duże wagi, a alpha określa jej wysokość.

Oto 20 używanych gitar i sześć przeskalowanych cech służących do przewidywania ceny:

Sześć linii, po jednej wadze dla każdej cechy gitary, w zależności od wartości alfa od 0.01 do 1000. Wartość dla stanu zaczyna się od 116, dla marki od 104, a dla wieku od minus 83; wszystkie dążą do 0 wraz ze wzrostem wartości alfa

To tylko jedna zamiana względem LinearRegression, którego wagi wynosiły [-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_))

To wyświetla:

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

Większa wartość alfa, mniejsze wagi, mniejsze przeuczenie. Jeśli jest zbyt duża, model niedoucza się.

challenge icon

Wyzwanie

Średni

Serwis z domkami wakacyjnymi przewiduje ceny za noc na podstawie 8 cech, używając tylko 16 domków. Program odczytuje alpha; kod początkowy dzieli i skaluje dane.

  1. Dopasuj model LinearRegression i model Ridge z tym alpha.
  2. Wypisz łączną wielkość wag każdego modelu: wartości wag bez znaków, zsumowane i zaokrąglone.
  3. Wypisz współczynnik R kwadrat dla każdego modelu testowego (3 miejsca po przecinku) oraz lepszy model, jak poniżej.

Dla innego regionu i 5:

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

Spróbuj swoich sił

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

# Nie zmieniaj poniższych wierszy: 28 domków letniskowych, 8 cech i cena za noc w 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)

# Napisz swój kod poniżej
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Uczenie nadzorowane

Poćwicz samodzielnie: Kompilator Python online