Menu
CoddyTech

Niedouczenie i przeuczenie

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

Masz już za sobą największą pułapkę uczenia maszynowego: zapamiętane k = 1 i głębokie drzewa. Ten rozdział ją nazywa i kończy się wykresami takimi jak ten:

Dokładność treningowa i walidacyjna drzewa w zależności od głębokości: treningowa rośnie w kierunku 1.0, walidacyjna osiąga maksimum przy głębokości 3 i spada. Przerywana linia oznacza wybraną głębokość, czerwona gwiazdka — jedyny wynik testu: 0.82

Pułapka: 15 roślin bazylii, podlewanych na różne sposoby, i trzy krzywe dopasowane do ich zbiorów:

Zbiory liści z 15 roślin treningowych przedstawione jako szare kropki oraz 5 roślin testowych przedstawione jako czarne kwadraty, w zależności od ilości wody dziennie. Prosta niebieska linia nie trafia w wybrzuszenie, zielona krzywa stopnia 3 podąża za nim, a czerwona krzywa stopnia 12 gwałtownie faluje między kropkami

Stopień 1 jest zbyt prosty: niedouczenie. Stopień 12 przechodzi przez każdy punkt treningowy, wahając się między nimi: przeuczenie, zapamiętywanie zamiast uczenia się.

np.polyval(coefs, x) podaje wysokości krzywej. Błąd RMSE dla danych treningowych i testowych, w gramach:

for degree in [1, 3, 12]:
    coefs = np.polyfit(water_train, grams_train, degree)
    train_err = np.sqrt(mean_squared_error(grams_train, np.polyval(coefs, water_train)))
    test_err = np.sqrt(mean_squared_error(grams_test, np.polyval(coefs, water_test)))
    print(degree, round(train_err), round(test_err))

Wyświetla:

1 156 138
3 15 19
12 9 173

Oznaka przeuczenia: mały błąd treningowy, duży błąd testowy.

challenge icon

Wyzwanie

Średni

Farma wiatrowa modeluje moc jednej turbiny na podstawie prędkości wiatru. Kod początkowy dzieli 24 odczyty i odczytuje max_degree.

  1. Dla każdego stopnia od 1 do max_degree dopasuj krzywą do wierszy treningowych; wypisz RMSE dla zbioru treningowego i testowego w pełnych kW.
  2. Wypisz pierwszy stopień, dla którego błąd testowy jest większy niż dwukrotność błędu treningowego, albo No overfitting up to degree i max_degree.

Dla innej turbiny i wartości 7:

Degree 1: train 117 kW, test 172 kW
Degree 2: train 115 kW, test 182 kW
Degree 3: train 64 kW, test 85 kW
Degree 4: train 63 kW, test 79 kW
Degree 5: train 47 kW, test 67 kW
Degree 6: train 47 kW, test 65 kW
Degree 7: train 23 kW, test 85 kW
Overfitting starts at degree 7

Spróbuj swoich sił

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

max_degree = int(input())

# Nie zmieniaj poniższych wierszy: prędkość wiatru (m/s) i moc (kW) jednej turbiny wiatrowej
speed = np.array([3.8, 4.3, 5.1, 5.6, 5.6, 6.7, 6.8, 7.2, 7.8, 8.5, 8.9, 9.1,
                  10.2, 10.9, 11.4, 11.9, 12.2, 12.4, 12.6, 13.2, 13.9, 14.4, 15.5, 16.5])
power = np.array([0, 85, 179, 22, 17, 126, 255, 273, 419, 545, 612, 665,
                  913, 1120, 1114, 1227, 1299, 1400, 1293, 1329, 1396, 1493, 1461, 1552])
speed_train, speed_test, power_train, power_test = train_test_split(
    speed, power, test_size=0.25, random_state=0)

# 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