Tìm kiếm ngẫu nhiên trong Scikit Learn

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

Alex Scriven

Data Scientist

So sánh với GridSearchCV

 

Không cần phát minh lại bánh xe. Hãy nhớ các bước cho Grid Search:

  1. Chọn thuật toán/estimator
  2. Xác định siêu tham số cần tinh chỉnh
  3. Đặt phạm vi giá trị cho mỗi siêu tham số
  4. Chọn sơ đồ cross-validation; và
  5. Chọn hàm điểm số
  6. Thêm thông tin/chức năng hữu ích khác
Tinh chỉnh siêu tham số trong Python

So sánh với Grid Search

   

Chỉ khác một điểm:

  • Bước 7 = Quyết định số mẫu sẽ lấy (rồi lấy mẫu)

 

Hết! (hầu như vậy)

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

So sánh các mô-đun Scikit Learn

Các mô-đun cũng tương tự:

GridSearchCV:

sklearn.model_selection.GridSearchCV(estimator, param_grid, 
        scoring=None, fit_params=None, 
        n_jobs=None,
        refit=True, cv='warn', verbose=0, 
        pre_dispatch='2*n_jobs', 
        error_score='raise-deprecating',
        return_train_score='warn')

 

RandomizedSearchCV:

sklearn.model_selection.RandomizedSearchCV(estimator, 
        param_distributions, n_iter=10, 
        scoring=None, fit_params=None, 
        n_jobs=None, refit=True, 
        cv='warn', verbose=0, 
        pre_dispatch='2*n_jobs',
        random_state=None, 
        error_score='raise-deprecating', 
        return_train_score='warn')
Tinh chỉnh siêu tham số trong Python

Khác biệt chính

 

Hai khác biệt chính:

  • n_iter là số mẫu mà random search lấy từ lưới của bạn. Ở ví dụ trước bạn đã dùng 300.

  • param_distributions hơi khác param_grid, cho phép tùy chọn đặt phân phối để lấy mẫu.

    • Mặc định: mọi tổ hợp có xác suất chọn như nhau.
Tinh chỉnh siêu tham số trong Python

Tạo đối tượng RandomizedSearchCV

Giờ ta có thể tạo đối tượng tìm kiếm ngẫu nhiên giống Grid Search, với thay đổi nhỏ:

# Set up the sample space
learn_rate_list = np.linspace(0.001,2,150)
min_samples_leaf_list = list(range(1,51))

# Create the grid
parameter_grid = {
    'learning_rate' : learn_rate_list,
    'min_samples_leaf' : min_samples_leaf_list}

# Define how many samples number_models = 10
Tinh chỉnh siêu tham số trong Python

Tạo đối tượng RandomizedSearchCV

Bây giờ ta tạo đối tượng

# Create a random search object
random_GBM_class = RandomizedSearchCV(
    estimator = GradientBoostingClassifier(),
    param_distributions = parameter_grid,
    n_iter = number_models,
    scoring='accuracy',
    n_jobs=4, 
    cv = 10,
    refit=True, 
    return_train_score = True)
# Fit the object to our data
random_GBM_class.fit(X_train, y_train)
Tinh chỉnh siêu tham số trong Python

Phân tích đầu ra

Kết quả hoàn toàn giống nhau!

Làm sao xem các giá trị siêu tham số đã chọn?

Từ điển cv_results_ (ở các cột param_ liên quan)!

Trích xuất danh sách:

rand_x = list(random_GBM_class.cv_results_['param_learning_rate'])
rand_y = list(random_GBM_class.cv_results_['param_min_samples_leaf'])
Tinh chỉnh siêu tham số trong Python

Phân tích đầu ra

Xây dựng trực quan hóa:

# Make sure we set the limits of Y and X appriately
x_lims = [np.min(learn_rate_list), np.max(learn_rate_list)]
y_lims = [np.min(min_samples_leaf_list), np.max(min_samples_leaf_list)]

# Plot grid results plt.scatter(rand_y, rand_x, c=['blue']*10) plt.gca().set(xlabel='learn_rate', ylabel='min_samples_leaf', title='Random Search Hyperparameters') plt.show()
Tinh chỉnh siêu tham số trong Python

Phân tích đầu ra

Biểu đồ tương tự như trước:

bao phủ biểu đồ ngẫu nhiên

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

¡Vamos a practicar!

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

Preparing Video For Download...