Từ workflow đến pipeline

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

Dr. Chris Anagnostopoulos

Honorary Associate Professor

Xem lại workflow của chúng ta

from sklearn.ensemble import RandomForestClassifier as rf
X_train, X_test, y_train, y_test = train_test_split(X, y)
grid_search = GridSearchCV(rf(), param_grid={'max_depth': [2, 5, 10]})
grid_search.fit(X_train, y_train)
depth = grid_search.best_params_['max_depth']
vt = SelectKBest(f_classif, k=3).fit(X_train, y_train)
clf = rf(max_depth=best_value).fit(vt.transform(X_train), y_train)
accuracy_score(clf.predict(vt.transform(X_test), y_test))
Thiết kế quy trình Machine Learning bằng Python

Sức mạnh của grid search

Tối ưu max_depth:

pg = {'max_depth': [2,5,10]}
gs = GridSearchCV(rf(),  
   param_grid=pg)
gs.fit(X_train, y_train)
depth = gs.best_params_['max_depth']

Bảng mọi kết hợp có thể của độ sâu và số lượng estimators, cho thấy đã thử ba giá trị và tìm được giá trị tốt nhất.

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

Sức mạnh của grid search

Sau đó tối ưu n_estimators:

pg = {'n_estimators': [10,20,30]}
gs = GridSearchCV(
   rf(max_depth=depth),  
   param_grid=pg)
gs.fit(X_train, y_train)
n_est = gs.best_params_[
    'n_estimators']

Bảng mọi kết hợp có thể của độ sâu và số lượng estimators, cho thấy đã thử năm giá trị và tìm được giá trị tốt hơn.

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

Sức mạnh của grid search

Tối ưu đồng thời max_depthn_estimators:

pg = {
   'max_depth': [2,5,10],
   'n_estimators': [10,20,30]
}
gs = GridSearchCV(rf(),  
   param_grid=pg)
gs.fit(X_train, y_train)
print(gs.best_params_) 

{'max_depth': 10, 'n_estimators': 20}

Bảng mọi kết hợp có thể của độ sâu và số lượng estimators, cho thấy đã thử mọi giá trị và tìm ra cùng giá trị tốt nhất.

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

Pipeline

Trong sơ đồ này, random forest có hai siêu tham số được nối bằng mũi tên với bộ chọn đặc trưng có một siêu tham số.

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

Pipeline

Cả hai đối tượng được gói trong một hộp duy nhất.

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

Pipeline

from sklearn.pipeline import Pipeline
pipe = Pipeline([
    ('feature_selection', SelectKBest(f_classif)), 
    ('classifier', RandomForestClassifier())
])

params = dict( feature_selection__k=[2, 3, 4], classifier__max_depth=[5, 10, 20] )
grid_search = GridSearchCV(pipe, param_grid=params) gs = grid_search.fit(X_train, y_train).best_params_
{'classifier__max_depth': 20, 'feature_selection__k': 4}
Thiết kế quy trình Machine Learning bằng Python

Tùy biến pipeline của bạn

from sklearn.metrics import roc_auc_score, make_scorer
auc_scorer = make_scorer(roc_auc_score)

grid_search = GridSearchCV(pipe, param_grid=params, scoring=auc_scorer)
Thiết kế quy trình Machine Learning bằng Python

Đừng lạm dụng quá

params = dict(
    feature_selection__k=[2, 3, 4], 
    clf__max_depth=[5, 10, 20], 
    clf__n_estimators=[10, 20, 30] 
)
grid_search = GridSearchCV(pipe, params, cv=10)

3 x 3 x 3 x 10 = 270 lần fit mô hình!

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

Workflow tăng tốc

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

Preparing Video For Download...