学习|R语言实现决策树模型
请思考:
1 决策树模型的原理是什么?如何生成决策树?如何优化决策树?
2 R语言有哪些包可以用来实现决策树模型?
3 决策树模型挖掘的规则如何应用?
我创建了R语言微信群,定位:R语言学习与实践,想加入的伙伴,请添加我的个人微信:luqin360,备注:R入群
一 决策树模型的原理
对决策树的原理请您先花10分钟时间阅读文章【决策树算法介绍及应用】。阅读的过程中,请解决好如下三个核心问题:
-
如何生成决策树?
-
如何优化决策树?
-
如何应用决策树?
请思考:
-
如何计算信息熵?
-
如何计算增益率?
-
如何计算Gini值?
二 R语言实现决策树模型
1 建模流程:问题定义-数据导入-数据清洗-数据划分-构建模型-模型预测-模型评价-模型调优-模型应用
2 使用rpart包做决策树模型
3 使用rpart.plot包做决策树结果可视化分析
4 模型性能评价工具:混淆矩阵
R语言代码
问题定义:泰坦尼克号用户生死存亡的预测?
Step1:导入数据集和数据检视
代码
set.seed(123)
PATH <- './data/titanic_csv.csv'
titanic <- read.csv(PATH)
head(titanic)
tail(titanic)
shuffle.index <- sample(1:nrow(titanic))
head(shuffle.index)
titanic <- titanic[shuffle.index,]
head(titanic)
class(titanic)
Step2:数据清洗与加工
代码
# 清洗数据集
# 1 删除变量集
# 2 变量类型转换
# 3 删除NA
library(dplyr)
clean.titanic <- titanic %>%
dplyr::select(-c(home.dest, cabin, name, X, ticket)) %>%
dplyr::mutate(pclass = factor(pclass, levels = c(1, 2, 3), labels = c('Upper', 'Middle', 'Lower')),
survived = factor(survived, levels = c(0, 1), labels = c('No', 'Yes'))) %>%
na.omit()
dplyr::glimpse(clean.titanic)
Step3:数据集划分
代码
# 数据集划分
# 训练集和测试集
library(caret)
train.index <- createDataPartition(clean.titanic$survived, p = 0.8, list = FALSE)
train.data <- clean.titanic[train.index, ]
test.data <- clean.titanic[-train.index, ]
dim(train.data)
dim(test.data)
# 目标变量的分布
prop.table(table(train.data$survived))
Step4:构建决策树模型
代码
library(rpart)
library(rpart.plot)
tree.fit <- rpart(
survived ~ .,
data = train.data,
method = 'class'
)
# 决策树模型结果可视化分析
par(mfrow=c(1,1))
rpart.plot(tree.fit, extra = 100)
请思考:
1 如何解读决策树模型结果?
Step5:模型预测
代码
# 模型的预测
predict.unseen <- predict(tree.fit, test.data, type = 'class')
Step6:模型性能评价-混淆矩阵
代码
# 模型评价-混淆矩阵
table.mat <- table(test.data$survived, predict.unseen)
table.mat
# 模型新能评价
# 模型准确度
accuracy.test <- sum(diag(table.mat)) / sum(table.mat)
print(paste('Accuracy for test', accuracy.test))
Step7:模型调优
代码
AccuracyTune <- function(fit){
predict.unseen <- predict(fit, test.data, type='class')
table.mat <- table(test.data$survived, predict.unseen)
accuracy.test <- sum(diag(table.mat)) / sum(table.mat)
accuracy.test
}
control <- rpart.control(
minsplit = 4,
minbucket = round(5/3),
maxdepth = 3,
cp = 0
)
tune.fit <- rpart(survived ~ ., data = train.data, method = 'class', control = control)
print(paste('Accuracy for test', AccuracyTune(tune.fit)))
rpart包使用rpart.control()函数来对决策树模型的超参数(无法从数据中学习到的参数,需要事先设定的参数)做控制。重要参数说明:
-
minsplit:算法分割之前,设置Node中最小的观察数量(样本数量)
-
minbucket:设置叶子节点最小观察数量
-
maxdepth:设置最终数的任何Node的最大深度
请思考:
请对该问题使用C5.0决策树算法?
附件:
本文数据集,R脚本请点击阅读原文下载和使用。
您在阅读中有什么问题,请留言。若是觉得有用,请您点赞和分享给其他朋友,感谢支持和分享。
公众号推荐:
数据人才(ID:datarencai)
(一个帮助数据人才找工作,
帮助数据公司招人才的公众号,
也分享数据人学习和生活的有趣事情。)
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!