栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > R语言

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

R语言 更新时间:发布时间: 百科书网 趣学号

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

说实话,前面的决策树理论介绍的我自己都累,尤其是第一节各种公式的编辑;当然了,我深知数学理论对一切结论的支撑重要性,数学是这个世界上最美的语言。有了前面的铺垫,这里我们废话不多说,直接进入最终目标,基于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算法正确率好像好一些,但它的叶节点数大一些!总的来看,两种算法效能好像差不多!关于决策树到这里总算落下帷幕了,好不容易!

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

终于等到你了!

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/855889.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号