当前浏览器不支持播放音乐或语音,请在微信或其他浏览器中播放

说实话,前面的决策树理论介绍的我自己都累,尤其是第一节各种公式的编辑;当然了,我深知数学理论对一切结论的支撑重要性,数学是这个世界上最美的语言。有了前面的铺垫,这里我们废话不多说,直接进入最终目标,基于R语言的两种经典决策树模型的实现。

这里用的数据集是R自带的应该是专门用来做决策树的训练数据集"Pima.tr"和测试数据集"Pima.te",因为这样可以保证人人都可以做模型实验。我本人觉得在这一点上R语言做的还是比较好的。

先看一下这两份训练与测试集的基本情况:

> head(Pima.tr)

npreg glu bp skin  bmi   ped age type

1     5  86 68   28 30.2 0.364  24   No

2     7 195 70   33 25.1 0.163  55  Yes

3     5  77 82   41 35.8 0.156  35   No

4     0 165 76   43 47.9 0.259  26   No

5     0 107 60   25 26.4 0.133  23   No

6     5  97 76   27 35.6 0.378  52  Yes

> dim(Pima.tr)

[1] 200   8

> head(Pima.te)

npreg glu bp skin  bmi   ped age type

1     6 148 72   35 33.6 0.627  50  Yes

2     1  85 66   29 26.6 0.351  31   No

3     1  89 66   23 28.1 0.167  21   No

4     3  78 50   32 31.0 0.248  26  Yes

5     2 197 70   45 30.5 0.158  53  Yes

6     5 166 72   19 25.8 0.587  51  Yes

> dim(Pima.te)

[1] 332   8

这两份数据,确实分别是训练集与测试集,下面分别介绍R语言的几种决策树构建与剪枝、树的可视化与预测过程,并分析其预测准确率!

01

CART

构建模型主要用函数rpart包的基本函数rpart(formula,data = ,control = rpart.control(cp = )),其中formula就是模型表达式,比如type~.,表示type对其它所有变量的决策树,"data ="指定作用的数据集, "control = rpart.control(cp = )"表示是否引入复杂系数进行剪枝。当然,这是几个基本模型参数。

(1)、未剪枝

rm(list = ls())

library(MASS)

library(rpart)

#绑定数据集,便于操作

attach(Pima.tr)

summary(Pima.tr)

#CART决策树分析

cart

summary(cart)

par(xpd = TRUE)

plot(cart,main = '未剪枝')

text(cart)

CART算法未剪枝决策树

(2)剪枝

#剪枝这里cp值为复杂系数

#cp = 0.1叶节点为3,留三个枝

cart1

#cp = 0.03叶节点为5,留五个枝

cart2

par(mfrow = c(1,2),xpd = TRUE)

plot(cart1,main = '留3个叶节点')

text(cart1)

plot(cart2,main = '留5个叶节点')

text(cart2)

剪枝结果决策树

(3)、测试数据集准确率检验

用训练好的模型进行预测的函数是predict(model,data,type = 'class'),第一个参数是训练好的决策树模型,第二个参数是用于测试的数据集,第三个参数type = "class"表示进行分类。

#测试数据集检验

#未剪枝

pre

#建立预测交叉矩阵

m

#预测正确率,diag(m)函数用于求矩阵对角线和,这里用于计算预测准确的数据数量之和。

sum(diag(m))/sum(m)

#叶节点为3

pre1

#建立预测交叉矩阵

m1

#预测正确率

sum(diag(m1))/sum(m1)

#叶节点为5

pre2

#建立预测交叉矩阵

m2

#预测正确率

sum(diag(m2))/sum(m2)

预测交叉矩阵是这样的形状

> m

predict

type   No Yes

No  182  41

Yes  48  61

> m1

predict

type   No Yes

No  184  39

Yes  51  58

> m2

predict

type   No Yes

No  193  30

Yes  51  58

未剪枝、留3个叶节点、留5个叶节点的预测分类正确率分别为

[1] 0.7319277

[1] 0.7289157

[1] 0.7560241

可见,不仅要剪枝,并且留5个叶节点的预测分类正确率是最好的。

02

C5.0

#===C5.0决策树分析===#

#noGlobalPruning值设为T表示不进行修剪

library(C50)

tr5.0

tr5.01

par(xpd = TRUE)

#--种类画图不需要text()--#

plot(tr5.0)

plot(tr5.01)

#预测

pre

pre1

##建立预测交叉矩阵

m

m1

#预测正确率

sum(diag(m))/sum(m)

#预测正确率

sum(diag(m1))/sum(m1)

画出的决策树如下:

未剪枝决策树

剪枝的决策树

预测交叉矩阵是这样的形状

> m

predict

type   No Yes

No  193  30

Yes  58  51

> m1

predict

type   No Yes

No  195  28

Yes  60  49

C5.0未剪枝、剪枝的预测分类正确率分别为:

[1] 0.7349398

[1] 0.7349398

预测分类正确率是一样的,虽然预测交叉矩阵不一样,因为它们的对角线之和是一样的。

03

两种算法的比较

经过实验我们得出的结果分别是这样的,如下所示:

比较内容

CART

C5.0

训练数据正确率

0.835

0.815

测试数据正确率

0.756

0.735

叶节点数

5

4

深度

3

3

对于实验数据,CART算法正确率好像好一些,但它的叶节点数大一些!总的来看,两种算法效能好像差不多!关于决策树到这里总算落下帷幕了,好不容易!

欢迎留言、提建议、意见,觉得不错,记得【点赞、分享】!

终于等到你了!

r语言c5.0决策树算法参数,决策树算法CART、C5.0的R语言实现——(三)相关推荐

  1. c5.0决策树算法_决策树算法

    决策树算法,从名字中也可以理解到该算法是以树形结构建立模型的,该算法主要根据分层和分割的方式将预测变量空间划分为一系列简单区域.对某个给定的待预测的观测值,用它所属区域中训练的平均值或众数进行预测.决 ...

  2. R语言ggplot2可视化通过se参数和level参数设置置信区间的显示与否以及置信区间的范围(95%、90%、50%)

    R语言ggplot2可视化通过se参数和level参数设置置信区间的显示与否以及置信区间的范围(95%.90%.50%) #默认置信区间(lm函数默认的置信区间) library(ggplot2) g ...

  3. R语言 -- car::scatterplotmatrix散点图矩阵 参数详解

    最近为了帮忙媳妇绘制医学SCI文章,学习了下R语言. 在R语言实战第二版书,第八章回归分析时,用到了scatterplotmatrix 函数绘制散点图矩阵,发现已经不是当前最新的car包了,函数参数都 ...

  4. R语言机器学习mlr3:超参数调优

    获取更多R语言和生信知识,请关注公众号:医学和生信笔记. 公众号后台回复R语言,即可获得海量学习资料! 目录 模型调优 调整超参数 方法一:通过`tuninginstancesinglecrite`和 ...

  5. R语言merge函数左连接dataframe数据(Left (outer) join in R)、左连接必须将参数all设置(all.x = TRUE)、默认merge函数通过公共列名合并数据集

    R语言merge函数左连接dataframe数据(Left (outer) join in R).merge函数进行左连接必须将参数all设置为(all.x = TRUE).默认merge函数通过公共 ...

  6. 三个有名的决策树算法:CHAID、CART和C4.5

    三个有名的决策树算法:CHAID.CART和C4.5 CHAID.CART和C4.5大概是决策树算法丛林中最有名,商业上运用也也最成功的算法了.CHAID (chi-squared automatic ...

  7. R语言学习笔记6_非参数的假设检验

    目录 六.非参数的假设检验 6.1 单总体位置参数的检验 6.1.1 中位数的符号检验 6.1.2 Wilcoxon 符号秩检验(更有效) 6.2 分布的一致性检验:卡方检验 6.3 两总体的比较与检 ...

  8. python中id3决策树算法_ID3决策树算法实现(Python版)

    1 #-*- coding:utf-8 -*- 2 3 from numpy import * 4 importnumpy as np5 importpandas as pd6 from math i ...

  9. VLC-3.0全部详细参数

    用法: vlc [选项] [流] ... 您可以在命令行中指定多个流. 它们将被加入播放列表队列. 指定的首个项目将被首先播放. 选项风格:   --选项  用于设置程序执行期间的全局选项.    - ...

最新文章

  1. Win7中如何删除word模板
  2. Kube-Scheduler插件的自定义
  3. 迅雷官方回应“被拖库”致密码泄露:恶意造谣
  4. 全国计算机等级考试题库二级C操作题100套(第26套)
  5. 前端学习(1973)vue之电商管理系统电商系统之完成修改的操作
  6. 深入Atlas系列:Web Sevices Access in Atlas示例(4) - 使用HTTP GET调用Web Services方法...
  7. 聚类效果评估指标总结
  8. Mysql学习总结(6)——MySql之ALTER命令用法详细解读
  9. Android下异步扫描视频文件缩略图
  10. H13-531 华为HCIE云计算笔试题库整理
  11. abs在c 语言中的作用是什么意思,abs什么意思 c语言中abs是什么意思
  12. 超好用的Server酱,推送微信消息
  13. SOPHGO PCIe加速卡SC5H/SC5+主机运行过热的解决方案
  14. 多机器人编队人工势场法协同避障算法原理及实现
  15. 请捎去我的祈祷和祝福
  16. F#中有趣的计量单位
  17. 向六种植物学习创业的真谛
  18. SwiftUI教程第1章第20:加载Web图片
  19. java怎么开始编写代码_Java编程入门:开始用Java编写代码
  20. css3倾斜的平行四边形,CSS3技巧之形状(平行四边形)

热门文章

  1. 宏锦软件2015年的计划
  2. 世界定级 企业即时通讯软件
  3. 真诚地希望你耐心的把它看完
  4. 想加入IT行业为何建议你学Python,不要错过时机哦
  5. 我来谈谈小程序和工作方向
  6. 下班啦!做那么多老板不会心疼你的
  7. 世界上最好用的浏览器Chrome 10周岁生日,迎来一大波更新!
  8. oracle rac fail,Oracle RAC Load Balance , Fail Over测试
  9. thymeleaf 判断checkbox是否选中_一日看尽长安花——复选框(CheckBox)数据清洗和统计的SAS实现...
  10. UCI机器学习数据集