Ước lượng hiệu suất với cross validation

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

David Svancer

Data Scientist

Tập huấn luyện và kiểm tra

 

Tạo tập huấn luyện và kiểm tra là bước đầu của quy trình mô hình

  • Giúp tránh overfitting
    • Dùng dữ liệu huấn luyện để fit mô hình
    • Dùng dữ liệu kiểm tra để đánh giá mô hình

 

Hạn chế

  • Chỉ có một ước lượng hiệu suất mô hình

 

Sơ đồ chia tập huấn luyện và kiểm tra

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

Cross validation K-fold

Kỹ thuật resampling để khám phá hiệu suất mô hình

  • Cung cấp K ước lượng hiệu suất trong quá trình fit mô hình

 

Chia dữ liệu thành tập huấn luyện và kiểm tra

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

Cross validation K-fold

Kỹ thuật resampling để khám phá hiệu suất mô hình

  • Cung cấp K ước lượng hiệu suất trong quá trình fit mô hình
  • Dữ liệu huấn luyện được chia ngẫu nhiên thành K phần xấp xỉ bằng nhau
  • Các fold dùng để thực hiện K lần fit và đánh giá mô hình

 

Chia dữ liệu huấn luyện thành các fold cross validation

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

Machine learning với cross validation

Thực hiện cross validation 5-fold

  • Năm lần lặp huấn luyện và đánh giá mô hình

 

Lần lặp 1 của cross validation 5-fold

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

Machine learning với cross validation

Thực hiện cross validation 5-fold

  • Năm lần lặp huấn luyện và đánh giá mô hình
  • Lần lặp 1
    • Fold 1 dành cho đánh giá; fold 2 đến 5 để huấn luyện

 

Lần lặp 1 của cross validation 5-fold

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

Machine learning với cross validation

Thực hiện cross validation 5-fold

  • Năm lần lặp huấn luyện và đánh giá mô hình
  • Lần lặp 1
    • Fold 1 dành cho đánh giá; fold 2 đến 5 để huấn luyện
  • Lần lặp 2
    • Fold 2 dành cho đánh giá

 

Lần lặp 2 của cross validation 5-fold

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

Machine learning với cross validation

Thực hiện cross validation 5-fold

  • Năm lần lặp huấn luyện và đánh giá mô hình
  • Lần lặp 1
    • Fold 1 dành cho đánh giá; fold 2 đến 5 để huấn luyện
  • Lần lặp 2
    • Fold 2 dành cho đánh giá

 

Tổng cộng có năm ước lượng hiệu suất mô hình

 

Lần lặp 5 của cross validation 5-fold

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

Tạo các fold cross validation

Hàm vfold_cv()

  • Dữ liệu huấn luyện
  • Số fold, v
  • Biến phân tầng, strata
  • Gọi set.seed() trước vfold_cv() để tái lập kết quả
  • splits
    • Cột danh sách chứa các đối tượng chia dữ liệu để tạo fold
set.seed(214)
leads_folds <- vfold_cv(leads_training,

v = 10,
strata = purchased)
leads_folds
#  10-fold cross-validation using stratification 
# A tibble: 10 x 2
   splits            id    
   <list>            <chr> 
 1 <split [896/100]> Fold01
 2 <split [896/100]> Fold02
 3 <split [896/100]> Fold03
 . ................  ......
 9 <split [897/99]>  Fold09
10 <split [897/99]>  Fold10
Mô hình hóa với tidymodels trong R

Huấn luyện mô hình với cross validation

Hàm fit_resamples()

  • Huấn luyện mô hình parsnip hoặc đối tượng workflow
  • Cung cấp các fold cross validation, resamples
  • Hàm metric tùy chọn, metrics
    • Mặc định: accuracy và ROC AUC

 

Mỗi metric được ước lượng 10 lần

  • Mỗi fold một ước lượng
  • Giá trị trung bình ở cột mean
leads_rs_fit <- leads_wkfl %>%

fit_resamples(resamples = leads_folds,
metrics = leads_metrics)
leads_rs_fit %>% collect_metrics()
# A tibble: 3 x 5
  .metric .estimator  mean     n std_err
  <chr>   <chr>      <dbl> <int>   <dbl>
1 roc_auc binary     0.823    10  0.0147
2 sens    binary     0.786    10  0.0203
3 spec    binary     0.855    10  0.0159
Mô hình hóa với tidymodels trong R

Kết quả cross validation chi tiết

Hàm collect_metrics()

  • Truyền summarize = FALSE để lấy mọi ước lượng metric cho từng fold
  • Tổng 30 tổ hợp (3 metric x 10 fold)
    • Cột .metric xác định metric
    • Cột .estimate là giá trị ước lượng cho mỗi fold
rs_metrics <- leads_rs_fit %>% 
  collect_metrics(summarize = FALSE)

rs_metrics
# A tibble: 30 x 4
   id     .metric .estimator .estimate
   <chr>  <chr>   <chr>          <dbl>
 1 Fold01 sens    binary         0.861
 2 Fold01 spec    binary         0.891
 3 Fold01 roc_auc binary         0.885
 4 Fold02 sens    binary         0.778
 5 Fold02 spec    binary         0.969
 6 Fold02 roc_auc binary         0.885
# ... with 24 more rows
Mô hình hóa với tidymodels trong R

Tóm tắt kết quả cross validation

collect_metrics() trả về một tibble

  • Có thể tóm tắt bằng dplyr
    • Bắt đầu với rs_metrics
    • Nhóm theo .metric
    • Tính thống kê tóm tắt với summarize()
rs_metrics %>%

group_by(.metric) %>%
summarize(min = min(.estimate), median = median(.estimate), max = max(.estimate), mean = mean(.estimate), sd = sd(.estimate))
# A tibble: 3 x 6
 .metric   min  median   max   mean     sd
  <chr>   <dbl>  <dbl>  <dbl>  <dbl>   <dbl>
1 roc_auc 0.758  0.806  0.885  0.823   0.0466
2 sens    0.667  0.792  0.861  0.786   0.0642
3 spec    0.810  0.843  0.969  0.855   0.0502
Mô hình hóa với tidymodels trong R

Phương pháp cross validation

Các mô hình huấn luyện bằng fit_resamples() không thể dự đoán cho dữ liệu mới

  • Hàm predict() không nhận đối tượng resample

Mục đích của fit_resample()

  • Khám phá và so sánh hồ sơ hiệu suất của các loại mô hình
  • Chọn loại mô hình tốt nhất và tập trung effort fit mô hình
predict(leads_rs_fit,
        new_data = leads_test)

Error in UseMethod("predict") : 
  no applicable method for 'predict' applied to 
  an object of class 
  "c('resample_results', 
      'tune_results',  
      'tbl_df', 
      'tbl', 'data.frame')"
Mô hình hóa với tidymodels trong R

Hãy cross validate!

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

Preparing Video For Download...