Diagnostika problémů s biasem a variancí

Machine Learning with Tree-Based Models in Python

Elie Kawerk

Data Scientist

Odhad chyby generalizace

  • Jak odhadnout chybu generalizace modelu?

  • Nelze to provést přímo, protože:

    • $f$ je neznámé,

    • obvykle máte k dispozici pouze jeden dataset,

    • šum je nepředvídatelný.

Machine Learning with Tree-Based Models in Python

Odhad chyby generalizace

Řešení:

  • rozdělení dat na trénovací a testovací sadu,
  • natrénování $\hat{f}$ na trénovací sadě,
  • vyhodnocení chyby $\hat{f}$ na neviděné testovací sadě.
  • chyba generalizace $\hat{f} \approx$ chyba $\hat{f}$ na testovací sadě.
Machine Learning with Tree-Based Models in Python

Lepší vyhodnocení modelu pomocí křížové validace

  • Testovací sada by neměla být použita, dokud si nejsme jisti výkonem $\hat{f}$.

  • Vyhodnocení $\hat{f}$ na trénovací sadě: zkreslený odhad, $\hat{f}$ již viděl všechny trénovací body.

  • Řešení $\rightarrow$ křížová validace (CV):

    • K-Fold CV,

    • Hold-Out CV.

Machine Learning with Tree-Based Models in Python

K-Fold CV

K-Fold CV

Machine Learning with Tree-Based Models in Python

K-Fold CV

Chyba CV

Machine Learning with Tree-Based Models in Python

Diagnostika problémů s variancí

  • Pokud $\hat{f}$ trpí vysokou variancí:

    CV chyba $\hat{f}$ > chyba $\hat{f}$ na trénovací sadě.

  • Říkáme, že $\hat{f}$ přeučuje trénovací sadu. Řešení přeučení:
    • snížení složitosti modelu,
    • např.: snížení max. hloubky, zvýšení min. počtu vzorků na list, ...
    • získání více dat, ..
Machine Learning with Tree-Based Models in Python

Diagnostika problémů s biasem

  • Pokud $\hat{f}$ trpí vysokým biasem:

    CV chyba $\hat{f} \approx$ chyba $\hat{f}$ na trénovací sadě $>>$ požadovaná chyba.

  • Říkáme, že $\hat{f}$ podučuje trénovací sadu. Řešení podučení:

    • zvýšení složitosti modelu
    • např.: zvýšení max. hloubky, snížení min. počtu vzorků na list, ...
    • získání relevantnějších příznaků
Machine Learning with Tree-Based Models in Python

K-Fold CV v sklearn na datasetu 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)
Machine Learning with Tree-Based Models in Python

K-Fold CV v sklearn na datasetu 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)
Machine Learning with Tree-Based Models in Python
# 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
Machine Learning with Tree-Based Models in Python

Pojďme si procvičit!

Machine Learning with Tree-Based Models in Python

Preparing Video For Download...