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决策树算法?
您在阅读中有什么问题,请留言。若是觉得有用,请您点赞和分享给其他朋友,感谢支持和分享。
公众号推荐:
(一个帮助数据人才找工作,
帮助数据公司招人才的公众号,
也分享数据人学习和生活的有趣事情。)
返回搜狐,查看更多
责任编辑:
平台声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。