Kompleksitas model dan overfitting

Merancang Alur Kerja Machine Learning di Python

Dr. Chris Anagnostopoulos

Honorary Associate Professor

Apa itu kompleksitas model?

RandomForestClassifier() memiliki argumen tambahan, seperti max_depth:

help(RandomForestClassifier)
Help on class RandomForestClassifier in module sklearn.ensemble.forest:
...
 |  max_depth : integer or None, optional (default=None)
 |      The maximum depth of the tree. If None, then nodes are expanded until
 |      all leaves are pure or until all leaves contain less than
 |      min_samples_split samples.
Merancang Alur Kerja Machine Learning di Python
m2 = RandomForestClassifier(
    max_depth=2)
m2.fit(X_train, y_train)

m2.estimators_[0]

Sebuah pohon keputusan dengan kedalaman 2.

m4 = RandomForestClassifier(
    max_depth=4)
m4.fit(X_train, y_train)

m4.estimators_[0]

Sebuah pohon keputusan dengan kedalaman 4.

Merancang Alur Kerja Machine Learning di Python

Praktik standar adalah membagi data menjadi training, test (atau development), dan validation (atau hold-out).

Merancang Alur Kerja Machine Learning di Python

Dalam cross-validation, pemisahan train-test dilakukan beberapa kali. Dataset dibagi menjadi N bagian; tiap kali, N-1 bagian dipakai untuk training dan sisanya untuk test.

Merancang Alur Kerja Machine Learning di Python

Cross-validation

Nilai akurasi dengan cross_val_score():

from sklearn.model_selection import cross_val_score

cross_val_score(RandomForestClassifier(), X, y)
array([0.7218 , 0.7682, 0.7866])
numpy.mean(cross_val_score(RandomForestClassifier(), X, y))
0.7589
Merancang Alur Kerja Machine Learning di Python

Menyetel kompleksitas model

Setel kedalaman pohon dengan GridSearchCV():

from sklearn.model_selection import GridSearchCV
param_grid = {'max_depth':[5,10,20]}
grid = GridSearchCV(RandomForestClassifier(), param_grid)
grid.fit(X,y)
grid._best_params
{'max_depth': 10}
Merancang Alur Kerja Machine Learning di Python

Akurasi in-sample mulai di 0,7 untuk kedalaman maksimum 3, lalu naik hampir ke 1,0 saat kedalaman dari 5 hingga 30.

Merancang Alur Kerja Machine Learning di Python

Akurasi out-of-sample juga mulai di 0,7, mencapai maksimum 0,75 pada kedalaman 10, lalu turun kembali ke 0,7 untuk kedalaman lebih besar.

Merancang Alur Kerja Machine Learning di Python

Rentang dari kedalaman 10 ke atas berwarna merah, menandakan terjadi overfitting.

Merancang Alur Kerja Machine Learning di Python

Lebih kompleks tidak selalu lebih baik!

Merancang Alur Kerja Machine Learning di Python

Preparing Video For Download...