Diagnosticarea problemelor de bias și varianță

Machine Learning cu modele bazate pe arbori în Python

Elie Kawerk

Data Scientist

Estimarea erorii de generalizare

  • Cum estimăm eroarea de generalizare a unui model?

  • Nu se poate face direct, deoarece:

    • $f$ este necunoscută,

    • de obicei dispuneți de un singur set de date,

    • zgomotul este imprevizibil.

Machine Learning cu modele bazate pe arbori în Python

Estimarea erorii de generalizare

Soluție:

  • împărțiți datele în seturi de antrenament și de testare,
  • ajustați $\hat{f}$ pe setul de antrenament,
  • evaluați eroarea lui $\hat{f}$ pe setul de testare nevăzut.
  • eroarea de generalizare a lui $\hat{f} \approx$ eroarea pe setul de testare.
Machine Learning cu modele bazate pe arbori în Python

Evaluare mai bună a modelului prin validare încrucișată

  • Setul de testare nu trebuie utilizat până când nu avem încredere în performanța lui $\hat{f}$.

  • Evaluarea lui $\hat{f}$ pe setul de antrenament: estimare biasată, $\hat{f}$ a văzut deja toate punctele.

  • Soluție $\rightarrow$ Validarea încrucișată (CV):

    • K-Fold CV,

    • Hold-Out CV.

Machine Learning cu modele bazate pe arbori în Python

K-Fold CV

K-Fold CV

Machine Learning cu modele bazate pe arbori în Python

K-Fold CV

Eroare CV

Machine Learning cu modele bazate pe arbori în Python

Diagnosticarea problemelor de varianță

  • Dacă $\hat{f}$ are varianță mare:

    Eroarea CV a lui $\hat{f}$ > eroarea pe setul de antrenament.

  • $\hat{f}$ supraajustează setul de antrenament. Soluții:
    • reduceți complexitatea modelului,
    • ex: reduceți adâncimea maximă, creșteți numărul minim de eșantioane per frunză, ...
    • colectați mai multe date, ..
Machine Learning cu modele bazate pe arbori în Python

Diagnosticarea problemelor de bias

  • Dacă $\hat{f}$ are bias ridicat:

    Eroarea CV a lui $\hat{f} \approx$ eroarea pe antrenament $>>$ eroarea dorită.

  • $\hat{f}$ subajustează setul de antrenament. Soluții:

    • creșteți complexitatea modelului
    • ex: creșteți adâncimea maximă, reduceți numărul minim de eșantioane per frunză, ...
    • colectați caracteristici mai relevante
Machine Learning cu modele bazate pe arbori în Python

K-Fold CV în sklearn pe setul de date 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 cu modele bazate pe arbori în Python

K-Fold CV în sklearn pe setul de date 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 cu modele bazate pe arbori în 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 cu modele bazate pe arbori în Python

Să exersăm!

Machine Learning cu modele bazate pe arbori în Python

Preparing Video For Download...