如何生长你的树

R 中的树模型机器学习

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 中的树模型机器学习

使用整个数据集

  • 把所有数据都用于训练,无法测试模型

model_flow_1

R 中的树模型机器学习

数据拆分

数据拆分

建模与评估

R 中的树模型机器学习

拆分方法

拆分方法

拆分方法2

拆分方法3

R 中的树模型机器学习

initial_split() 函数

  • 将数据随机拆为一个训练集和一个测试集
# 按比例拆分数据(默认:0.75)
diabetes_split <- initial_split(diabetes, prop = 0.9)
diabetes_split
<Analysis/Assess/Total>
<692/76/768>
1 来自 rsample 包
R 中的树模型机器学习

training() 与 testing() 函数

  • 从数据拆分中提取训练集和测试集
diabetes_train <- training(diabetes_split)

diabetes_test <- testing(diabetes_split)
  • 验证:
    nrow(diabetes_train)/nrow(diabetes)
    
[1] 0.9007812
1 来自 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...