Điều chỉnh siêu tham số

Mô hình hóa với tidymodels trong R

David Svancer

Data Scientist

Siêu tham số

Các tham số mô hình được đặt trước khi huấn luyện và kiểm soát độ phức tạp mô hình

parsnipcây quyết định

  • cost_complexity
    • Phạt số lượng nút lá lớn
  • tree_depth
    • Đường đi dài nhất từ gốc đến nút lá
  • min_n
    • Số điểm dữ liệu tối thiểu trong một nút để tiếp tục chia

Vùng chữ nhật của mô hình cây quyết định

Mô hình hóa với tidymodels trong R

Giá trị mặc định của siêu tham số

Hàm decision_tree() đặt giá trị siêu tham số mặc định

  • cost_complexity = 0.01
  • tree_depth = 30
  • min_n = 20

Các giá trị này có thể không tối ưu cho mọi dữ liệu

  • Tinh chỉnh siêu tham số
    • Quy trình dùng cross-validation để tìm bộ giá trị tối ưu
dt_model <- decision_tree() %>% 
  set_engine('rpart') %>% 
  set_mode('classification')
Mô hình hóa với tidymodels trong R

Gắn nhãn siêu tham số để tinh chỉnh

Hàm tune() từ gói tune

  • Để gắn nhãn siêu tham số cần tinh chỉnh, đặt chúng bằng tune() trong khai báo mô hình parsnip
  • Tạo đối tượng mô hình với tham số cần tinh chỉnh
    • Cho các hàm khác biết cần tối ưu
dt_tune_model <- decision_tree(cost_complexity = tune(),
                               tree_depth = tune(),
                               min_n = tune()) %>% 
  set_engine('rpart') %>% 
  set_mode('classification')

dt_tune_model
Decision Tree Model Specification (classification)

Main Arguments:
  cost_complexity = tune()
  tree_depth = tune()
  min_n = tune()

Computational engine: rpart
Mô hình hóa với tidymodels trong R

Tạo workflow để tinh chỉnh

Dễ dàng cập nhật đối tượng workflow

  • leads_wkfl trước đó
    • Các bước tạo đặc trưng cho dữ liệu chấm điểm lead và mô hình cây quyết định với siêu tham số mặc định
  • Truyền leads_wkfl vào update_model() và cung cấp mô hình cây quyết định mới với tham số cần tinh chỉnh
leads_tune_wkfl <- leads_wkfl %>% 

update_model(dt_tune_model)
leads_tune_wkfl
== Workflow ===============
Preprocessor: Recipe
Model: decision_tree()
-- Preprocessor -----------
3 Recipe Steps
* step_corr()
* step_normalize()
* step_dummy()
-- Model ------------------
Decision Tree Model Specification (classification)
Main Arguments: cost_complexity = tune()
                tree_depth = tune()
                min_n = tune()
Computational engine: rpart
Mô hình hóa với tidymodels trong R

Tìm kiếm theo lưới (Grid search)

Cách phổ biến nhất để tinh chỉnh siêu tham số

  • Tạo một lưới các tổ hợp giá trị siêu tham số duy nhất
    • Với mỗi tổ hợp, dùng cross-validation để ước lượng hiệu năng
  • Chọn tổ hợp tốt nhất

 

cost_complexity tree_depth min_n
0.001 20 35
0.001 20 15
0.001 35 35
0.001 35 15
0.2 20 35
... ... ...
Mô hình hóa với tidymodels trong R

Xác định siêu tham số

Hàm parameters() từ gói dials

  • Nhận đối tượng mô hình parsnip
  • Trả về tibble các siêu tham số được gắn nhãn bằng tune(), nếu có
    • Dùng để tạo lưới tinh chỉnh với gói dials
parameters(dt_tune_model)
Collection of 3 parameters for tuning

  identifier            type     object
cost_complexity  cost_complexity nparam[+]
tree_depth       tree_depth      nparam[+]
min_n            min_n           nparam[+]
Mô hình hóa với tidymodels trong R

Lưới ngẫu nhiên

Sinh các tổ hợp ngẫu nhiên

  • Cách này thường tăng cơ hội tìm giá trị tối ưu

Hàm grid_random()

  • Tham số đầu là kết quả của parameters()
  • size đặt số tổ hợp ngẫu nhiên cần tạo
    • Gọi set.seed() trước grid_random() để tái lập
set.seed(214)
grid_random(parameters(dt_tune_model),

size = 5)
# A tibble: 5 x 3
  cost_complexity  tree_depth min_n
            <dbl>      <int>  <int>
1    0.0000000758        14     39
2    0.0243               5     34
3    0.00000443          11      8
4    0.000000600          3      5
5    0.00380              5     36
Mô hình hóa với tidymodels trong R

Lưu một lưới tinh chỉnh

Bước đầu trong tinh chỉnh siêu tham số

  • Tạo và lưu một lưới tinh chỉnh
  • dt_grid chứa 5 tổ hợp ngẫu nhiên giá trị siêu tham số
set.seed(214)
dt_grid <- grid_random(parameters(dt_tune_model),
                       size = 5)

dt_grid
# A tibble: 5 x 3
  cost_complexity  tree_depth min_n
            <dbl>      <int>  <int>
1    0.0000000758        14     39
2    0.0243               5     34
3    0.00000443          11      8
4    0.000000600          3      5
5    0.00380              5     36
Mô hình hóa với tidymodels trong R

Tinh chỉnh với cross-validation

Hàm tune_grid() thực hiện tinh chỉnh siêu tham số

Nhận các đối số:

  • workflow hoặc mô hình parsnip
  • Đối tượng cross-validation, resamples
  • Lưới tinh chỉnh, grid
  • Hàm metrics tùy chọn

Trả về tibble kết quả

  • .metrics
    • Cột danh sách với kết quả cho từng fold
dt_tuning <- leads_tune_wkfl %>%

tune_grid(resamples = leads_folds,
grid = dt_grid,
metrics = leads_metrics)
dt_tuning
# Tuning results
# 10-fold cross-validation using stratification 
# A tibble: 10 x 4
   splits             id       .metrics         ..
   <list>            <chr>      <list>          ..
<split [896/100]>   Fold01   <tibble [15 x 7]>  ..
................    ......   ...............    ..
<split [897/99]>    Fold09   <tibble [15 x 7]>  ..
<split [897/99]>    Fold10   <tibble [15 x 7]>  ..
Mô hình hóa với tidymodels trong R

Khám phá kết quả tinh chỉnh

Hàm collect_metrics() mặc định cung cấp kết quả tổng hợp

  • Trung bình các giá trị chỉ số qua tất cả các fold cho mỗi tổ hợp
dt_tuning %>% 
  collect_metrics()
# A tibble: 15 x 9
   cost_complexity tree_depth min_n .metric .estimator  mean     n std_err .config
             <dbl>      <int> <int> <chr>   <chr>      <dbl> <int>   <dbl> <chr>  
 1    0.0000000758         14    39 roc_auc binary     0.827    10 0.0147  Model1 
 2    0.0000000758         14    39 sens    binary     0.728    10 0.0277  Model1 
 3    0.0000000758         14    39 spec    binary     0.865    10 0.0156  Model1 
 4    0.0243                5    34 roc_auc binary     0.823    10 0.0147  Model2 
 .    ......               ..    .. ....    ......     .....    .. .....   ......
14    0.00380               5    36 sens    binary     0.747    10 0.0209  Model5 
15    0.00380               5    36 spec    binary     0.858    10 0.0161  Model5
Mô hình hóa với tidymodels trong R

Bắt đầu tinh chỉnh!

Mô hình hóa với tidymodels trong R

Preparing Video For Download...