木の成長方法

Rで学ぶTree-Based ModelsによるMachine Learning

Sandro Raabe

Data Scientist

Diabetes データセット

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で学ぶTree-Based ModelsによるMachine Learning

全データの使用

  • すべてを学習に使用 → テスト用が残らない

model_flow_1

Rで学ぶTree-Based ModelsによるMachine Learning

データ分割

データ分割

モデルと評価

Rで学ぶTree-Based ModelsによるMachine Learning

分割手法

分割手法

分割手法2

分割手法3

Rで学ぶTree-Based ModelsによるMachine Learning

initial_split() 関数

  • データをランダムに分け、学習用とテスト用を1組作成
# 比率で分割(既定: 0.75)
diabetes_split <- initial_split(diabetes, prop = 0.9)
diabetes_split
<Analysis/Assess/Total>
<692/76/768>
1 rsample パッケージより
Rで学ぶTree-Based ModelsによるMachine Learning

training() と testing() 関数

  • データ分割から学習用・テスト用を抽出
diabetes_train <- training(diabetes_split)

diabetes_test <- testing(diabetes_split)
  • 検証:
    nrow(diabetes_train)/nrow(diabetes)
    
[1] 0.9007812
1 rsample より
Rで学ぶTree-Based ModelsによるMachine Learning

クラス不均衡を避ける

# 学習データの '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で学ぶTree-Based ModelsによるMachine Learning

解決策 - 分布をそろえる

initial_split(diabetes, 
              prop = 0.9, 
              strata = outcome)
  • outcome の分布を似せたランダム分割を保証
Rで学ぶTree-Based ModelsによるMachine Learning

分割しよう!

Rで学ぶTree-Based ModelsによるMachine Learning

Preparing Video For Download...