Giới thiệu Grid Search

Tinh chỉnh siêu tham số trong Python

Alex Scriven

Data Scientist

Tự động hóa 2 siêu tham số

Công việc trước đây của bạn:

neighbors_list = [3,5,10,20,50,75]
accuracy_list = []
for test_number in neighbors_list:
    model = KNeighborsClassifier(n_neighbors=test_number)
    predictions = model.fit(X_train, y_train).predict(X_test)
    accuracy = accuracy_score(y_test, predictions)
    accuracy_list.append(accuracy)

Sau đó ta tổng hợp vào dataframe để phân tích.

Tinh chỉnh siêu tham số trong Python

Tự động hóa 2 siêu tham số

 

Vậy còn thử giá trị của 2 siêu tham số?

Dùng thuật toán GBM:

  • learn_rate [0.001, 0.01, 0.05]
  • max_depth [4,6,8,10]

Ta có thể dùng vòng lặp for (lồng nhau)!

Tinh chỉnh siêu tham số trong Python

Tự động hóa 2 siêu tham số

Trước hết là hàm tạo mô hình:

def gbm_grid_search(learn_rate, max_depth):
    model = GradientBoostingClassifier(
            learning_rate=learn_rate,
            max_depth=max_depth)

predictions = model.fit(X_train, y_train).predict(X_test)
return([learn_rate, max_depth, accuracy_score(y_test, predictions)])
Tinh chỉnh siêu tham số trong Python

Tự động hóa 2 siêu tham số

 

Giờ ta lặp qua các danh sách siêu tham số và gọi hàm:

results_list = []

for learn_rate in learn_rate_list:
    for max_depth in max_depth_list:
        results_list.append(gbm_grid_search(learn_rate,max_depth))

Tinh chỉnh siêu tham số trong Python

Tự động hóa 2 siêu tham số

 

Ta cũng có thể đưa kết quả vào DataFrame và in ra:

results_df = pd.DataFrame(results_list, columns=['learning_rate', 'max_depth', 'accuracy'])
print(results_df)

bảng kết quả

Tinh chỉnh siêu tham số trong Python

Có bao nhiêu mô hình?

 

Có nhiều mô hình hơn khi thêm siêu tham số và giá trị.

  • Mối quan hệ không tuyến tính, mà là lũy thừa
  • Thêm 1 giá trị cho 1 siêu tham số không chỉ thêm 1 mô hình
  • 5 cho Siêu tham số 1 và 10 cho Siêu tham số 2 là 50 mô hình!

Còn cross-validation thì sao?

  • Cross-validation 10-fold sẽ thành 50x10 = 500 mô hình!
Tinh chỉnh siêu tham số trong Python

Từ 2 đến N siêu tham số

 

Nếu thêm nhiều siêu tham số nữa thì sao?

Ta có thể lồng vòng lặp!

# Điều chỉnh danh sách giá trị cần thử
learn_rate_list = [0.001, 0.01, 0.1, 0.2, 0.3, 0.4, 0.5]
max_depth_list = [4,6,8, 10, 12, 15, 20, 25, 30]
subsample_list = [0.4,0.6, 0.7, 0.8, 0.9]
max_features_list = ['auto', 'sqrt']
Tinh chỉnh siêu tham số trong Python

Từ 2 đến N siêu tham số

Điều chỉnh hàm của ta:

def gbm_grid_search(learn_rate, max_depth,subsample,max_features):
    model = GradientBoostingClassifier(
        learning_rate=learn_rate, 
        max_depth=max_depth,
        subsample=subsample,
        max_features=max_features)
    predictions = model.fit(X_train, y_train).predict(X_test)
    return([learn_rate, max_depth, accuracy_score(y_test, predictions)])
Tinh chỉnh siêu tham số trong Python

Từ 2 đến N siêu tham số

Điều chỉnh vòng lặp for (lồng nhau):

for learn_rate in learn_rate_list:
    for max_depth in max_depth_list:
        for subsample in subsample_list:
            for max_features in max_features_list:
                results_list.append(gbm_grid_search(learn_rate,max_depth,
                                     subsample,max_features))
results_df = pd.DataFrame(results_list, columns=['learning_rate',
                         'max_depth', 'subsample', 'max_features','accuracy'])
print(results_df)
Tinh chỉnh siêu tham số trong Python

Từ 2 đến N siêu tham số

 

Giờ có bao nhiêu mô hình?

  • 7x9x5x2 = 630 (6.300 nếu dùng cross-validation!)

Ta không thể lồng mãi được!

Thêm nữa, nếu ta muốn:

  • Chi tiết thời gian huấn luyện & điểm số
  • Chi tiết điểm số cross-validation
Tinh chỉnh siêu tham số trong Python

Giới thiệu Grid Search

Hãy tạo một lưới:

  • Cột dọc là mọi giá trị của max_depth
  • Hàng ngang là mọi giá trị của learning_rate

Bảng tổ hợp siêu tham số

Tinh chỉnh siêu tham số trong Python

Giới thiệu Grid Search

Duyệt qua từng ô trên lưới:

bảng tổ hợp siêu tham số

(4,0.001) tương đương tạo estimator như sau:

GradientBoostingClassifier(max_depth=4, learning_rate=0.001)
Tinh chỉnh siêu tham số trong Python

Ưu & nhược điểm của Grid Search

 

Một số ưu điểm của cách này:

Ưu điểm:

  • Bạn không phải viết hàng nghìn dòng mã
  • Tìm mô hình tốt nhất trong lưới (*ghi chú đặc biệt!)
  • Dễ giải thích
Tinh chỉnh siêu tham số trong Python

Ưu & nhược điểm của Grid Search

 

Một số nhược điểm:

  • Tốn tài nguyên tính toán! Nhớ cách ta nhanh chóng tạo 6.000+ mô hình không?
  • “Không có thông tin định hướng”: kết quả của một mô hình không giúp tạo mô hình kế tiếp.

 

Ta sẽ học các phương pháp “có định hướng” sau!

Tinh chỉnh siêu tham số trong Python

Vamos praticar!

Tinh chỉnh siêu tham số trong Python

Preparing Video For Download...