如何成長你的樹

R 的樹狀模型機器學習

Sandro Raabe

Data Scientist

糖尿病資料集

head(diabetes)
# A tibble: 6 x 9
  outcome pregnancies glucose blood_pressure skin_thickness insulin   bmi    age
  <fct>         <int>   <int>          <int>          <int>   <int> <dbl>  <int>
1 yes               6     148             72             35       0  33.6     50
2 no                1      85             66             29       0  26.6     31
3 yes               8     183             64              0       0  23.3     32
R 的樹狀模型機器學習

使用整個資料集

  • 全部資料都拿去訓練,沒有留測試資料評估模型

model_flow_1

R 的樹狀模型機器學習

資料切分

datasplit

model and evaluation

R 的樹狀模型機器學習

切分方法

splitting methods

splitting_methods2

splitting_methods3

R 的樹狀模型機器學習

initial_split() 函式

  • 隨機切成單一訓練集與單一測試集
# Split data proportionally (default: 0.75)
diabetes_split <- initial_split(diabetes, prop = 0.9)
diabetes_split
<Analysis/Assess/Total>
<692/76/768>
1 from the rsample package
R 的樹狀模型機器學習

training() 與 testing() 函式

  • 從資料切分物件擷取訓練集與測試集
diabetes_train <- training(diabetes_split)

diabetes_test <- testing(diabetes_split)
  • 驗證:
    nrow(diabetes_train)/nrow(diabetes)
    
[1] 0.9007812
1 from rsample
R 的樹狀模型機器學習

避免類別不平衡

# 訓練集中 'yes' 與 'no' 的筆數
counts_train <- table(diabetes_train$outcome)
counts_train
 no yes 
490 86
# 訓練集中 'yes' 的比例
prop_yes_train <- counts_train["yes"]/
                  sum(counts_train)
prop_yes_train
0.15
# 測試集中 'yes' 與 'no' 的筆數
counts_test <- table(diabetes_test$outcome)
counts_test
 no yes 
 28  48
# 測試集中 'yes' 的比例
prop_yes_test <- counts_test["yes"]/ 
                  sum(counts_test)
prop_yes_test
0.63
R 的樹狀模型機器學習

解法:維持相近分佈

initial_split(diabetes, 
              prop = 0.9, 
              strata = outcome)
  • 確保隨機切分時,outcome 變數的分佈相近
R 的樹狀模型機器學習

開始切分!

R 的樹狀模型機器學習

Preparing Video For Download...