Độ phức tạp mô hình và overfitting

Thiết kế quy trình Machine Learning bằng Python

Dr. Chris Anagnostopoulos

Honorary Associate Professor

Độ phức tạp mô hình là gì?

RandomForestClassifier() nhận thêm tham số như 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.
Thiết kế quy trình Machine Learning bằng Python
m2 = RandomForestClassifier(
    max_depth=2)
m2.fit(X_train, y_train)

m2.estimators_[0]

Một cây quyết định có độ sâu 2.

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

m4.estimators_[0]

Một cây quyết định có độ sâu 4.

Thiết kế quy trình Machine Learning bằng Python

Thực hành chuẩn là chia dữ liệu thành tập huấn luyện, kiểm tra (hoặc phát triển) và kiểm định (hoặc hold-out).

Thiết kế quy trình Machine Learning bằng Python

Trong cross-validation, phép chia train-test được lặp lại nhiều lần. Tập dữ liệu được chia thành N phần; mỗi lần dùng N−1 phần để huấn luyện và phần còn lại để kiểm tra.

Thiết kế quy trình Machine Learning bằng Python

Cross-validation

Đánh giá độ chính xác bằng 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
Thiết kế quy trình Machine Learning bằng Python

Điều chỉnh độ phức tạp mô hình

Tinh chỉnh độ sâu cây bằng 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}
Thiết kế quy trình Machine Learning bằng Python

Độ chính xác trong mẫu bắt đầu ở 0,7 với độ sâu tối đa 3 và tăng gần đến 1,0 khi độ sâu từ 5 đến 30.

Thiết kế quy trình Machine Learning bằng Python

Độ chính xác ngoài mẫu cũng bắt đầu ở 0,7, đạt tối đa 0,75 tại độ sâu 10 rồi giảm về 0,7 khi độ sâu lớn hơn.

Thiết kế quy trình Machine Learning bằng Python

Vùng từ độ sâu 10 trở đi được tô đỏ, cho thấy xảy ra overfitting.

Thiết kế quy trình Machine Learning bằng Python

Phức tạp hơn không phải lúc nào cũng tốt!

Thiết kế quy trình Machine Learning bằng Python

Preparing Video For Download...