Diagnozowanie problemów z obciążeniem i wariancją

Uczenie maszynowe z modelami drzewiastymi w Pythonie

Elie Kawerk

Data Scientist

Szacowanie błędu generalizacji

  • Jak oszacować błąd generalizacji modelu?

  • Nie można tego zrobić bezpośrednio, ponieważ:

    • $f$ jest nieznane,

    • zazwyczaj dysponujemy tylko jednym zbiorem danych,

    • szum jest nieprzewidywalny.

Uczenie maszynowe z modelami drzewiastymi w Pythonie

Szacowanie błędu generalizacji

Rozwiązanie:

  • podzielić dane na zbiór treningowy i testowy,
  • dopasować $\hat{f}$ do zbioru treningowego,
  • ocenić błąd $\hat{f}$ na niewidzianym zbiorze testowym.
  • błąd generalizacji $\hat{f} \approx$ błąd testowy $\hat{f}$.
Uczenie maszynowe z modelami drzewiastymi w Pythonie

Lepsza ocena modelu z walidacją krzyżową

  • Zbioru testowego nie należy używać, dopóki nie jesteśmy pewni wydajności $\hat{f}$.

  • Ocena $\hat{f}$ na zbiorze treningowym: obciążone oszacowanie — $\hat{f}$ widział już wszystkie punkty treningowe.

  • Rozwiązanie $\rightarrow$ walidacja krzyżowa (CV):

    • K-Fold CV,

    • Hold-Out CV.

Uczenie maszynowe z modelami drzewiastymi w Pythonie

K-Fold CV

K-Fold CV

Uczenie maszynowe z modelami drzewiastymi w Pythonie

K-Fold CV

Błąd CV

Uczenie maszynowe z modelami drzewiastymi w Pythonie

Diagnozowanie problemów z wariancją

  • Jeśli $\hat{f}$ ma problem z wysoką wariancją:

    Błąd CV $\hat{f}$ > błąd treningowy $\hat{f}$.

  • Mówimy, że $\hat{f}$ przeuczył zbiór treningowy. Jak zaradzić przeuczeniu:
    • zmniejszyć złożoność modelu,
    • np. zmniejszyć max depth, zwiększyć min samples per leaf, ...
    • zebrać więcej danych, ..
Uczenie maszynowe z modelami drzewiastymi w Pythonie

Diagnozowanie problemów z obciążeniem

  • Jeśli $\hat{f}$ ma problem z wysokim obciążeniem:

    Błąd CV $\hat{f} \approx$ błąd treningowy $\hat{f} >>$ oczekiwany błąd.

  • Mówimy, że $\hat{f}$ niedoucza zbiór treningowy. Jak zaradzić niedouczeniu:

    • zwiększyć złożoność modelu
    • np. zwiększyć max depth, zmniejszyć min samples per leaf, ...
    • zebrać bardziej trafne cechy
Uczenie maszynowe z modelami drzewiastymi w Pythonie

K-Fold CV w sklearn na zbiorze Auto

from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error as MSE
from sklearn.model_selection import cross_val_score

# Set seed for reproducibility SEED = 123 # Split data into 70% train and 30% test X_train, X_test, y_train, y_test = train_test_split(X,y, test_size=0.3, random_state=SEED)
# Instantiate decision tree regressor and assign it to 'dt' dt = DecisionTreeRegressor(max_depth=4, min_samples_leaf=0.14, random_state=SEED)
Uczenie maszynowe z modelami drzewiastymi w Pythonie

K-Fold CV w sklearn na zbiorze Auto

# Evaluate the list of MSE ontained by 10-fold CV 
# Set n_jobs to -1 in order to exploit all CPU cores in computation
MSE_CV = - cross_val_score(dt, X_train, y_train, cv= 10, 
                           scoring='neg_mean_squared_error',
                           n_jobs = -1)

# Fit 'dt' to the training set dt.fit(X_train, y_train) # Predict the labels of training set y_predict_train = dt.predict(X_train) # Predict the labels of test set y_predict_test = dt.predict(X_test)
Uczenie maszynowe z modelami drzewiastymi w Pythonie
# CV MSE  
print('CV MSE: {:.2f}'.format(MSE_CV.mean()))
CV MSE: 20.51
# Training set MSE
print('Train MSE: {:.2f}'.format(MSE(y_train, y_predict_train)))
Train MSE: 15.30
# Test set MSE
print('Test MSE: {:.2f}'.format(MSE(y_test, y_predict_test)))
Test MSE: 20.92
Uczenie maszynowe z modelami drzewiastymi w Pythonie

Czas na ćwiczenia!

Uczenie maszynowe z modelami drzewiastymi w Pythonie

Preparing Video For Download...