基于R语言的数据挖掘之决策树(二)

C5.0是C4.5应用于大数据集上的分类算法,主要在执行效率和内存使用方面进行了改进。


在上一篇文中(基于R语言的数据挖掘之决策树(一))提到决策树包含了树的生长过程和剪枝过程,C5.0算法也无例外。接下来对C5.0算法的这两个过程做一个简单的介绍。


树的生长过程中又涉及到两个核心问题,即最佳分组变量的选择和最佳分割点的选择。C5.0以信息增益率为标准确定最佳分组变量和最佳分割点。

关于信息增益率的理论可以参考《Clementine数据挖掘方法及应用》第6章第2节。


这里需要提到的是,如果最佳分组变量时分类变量时,C5.0算法将把每个分类水平最为一个分支,这不同于CART算法,CART算法的处理办法是将这些分类水平组成一个“超类”。C5.0这样做的好处是在以后的树生长过程中将不再涉及到该分类变量;如果最佳分类变量为连续变量时,C5.0算法将使用MDLP(基于最短描述长度原则)算法对该变量进行分箱处理,形成二叉树。


下面重点介绍一下C5.0算法的剪枝过程,该算法使用后修剪自下而上逐层剪枝,一般剪枝包含“减少-误差”法和“减少-损失”法。


“减少-误差”法:其核心思想是对比剪枝前后的误差率,如果剪枝后的误差率比剪枝前的误差率要低,则剪枝,否则不剪枝。在这个剪枝过程中需要计算每个节点的误差率,误差率的计算利用到了统计学中置信区间的概念。

误差率的计算:如果第i个节点中包含N个样本,其中预测错误的样本量为M,则该节点的错误率为f=M/N,根据统计学正态分布假设,该观测错误率的置信区间为:

0?wx_fmt=png

C5.0算法默认的置信水平为0.25。根据以上公式可知,当置信水平越高时,临界值z就越低,即真实误差就越低。

0?wx_fmt=png


“减少-损失”法:该方法结合损失矩阵对树进行剪枝,核心思想是比较剪枝前后损失量,如果剪枝后的损失要小于剪枝前的损失,则剪枝,否则不剪枝。

损失矩阵就是一种"惩罚"矩阵,即误判所带来的损失,矩阵的行和列与输出变量的水平的个数一致,行代表预测情况,列代表实际情况

有关损失值的计算如下:

0?wx_fmt=png


最后再介绍一下C5.0中的boosting技术,该技术就是对现有加权样本的反复抽样以实现样本量的增加,整个过程需要k次迭代,C5.0默认1次迭代,即不增加样本量。

这里的加权是指:

第一次迭代即建立第一个模型时,每个样本以相同的权重进入到模型,建模后对于错误预测的样本将给予高的权重,正确预测的样本给予低的权重。

第二次迭代时模型更关心权重大的样本,经过建模后又重新对样本分配权重。

这样以此类推下去完成k次迭代。


下面在进入实战之前简单介绍一下建模的函数C5.0

语法:

C5.0(x, y, trials = 1, rules= FALSE,

weights = NULL,

control = C5.0Control(),

costs = NULL, ...)


x为输入模型的自变量

y为输入模型的因变量

trials为boosting迭代的次数

rules要求输出推理规则集

cost为需要指定的损失矩阵

control指定C5.0模型的其他参数,如是否显示自变量的特征选择、设置错误率的置信水平、节点的最小样本量、控制进行Train与Test模型的sample比例等。


应用:使用的数据集为C50包中自带的客户流失数据


#生成训练样本集测试样本

data('churn', package ='C50')

train <- churnTrain

test <- churnTest

#使用C5.0函数建模

fit1 <- C5.0(x = train[,-20], y = train[,20])

summary(fit1)

0?wx_fmt=png0?wx_fmt=png

summary()函数返回模型的决策树规则、误判率和变量选择


模型预测:

0?wx_fmt=png
从上图可知模型的预测准确率还是非常高的(C5.0已经对模型做了剪枝工作),达到了94.7%。


接下来看看C50中的Boosting技术,通过该技术可以建立一个稳健的模型。这里设置迭代的次数为10。

0?wx_fmt=png
很明显,通过迭代后模型的准确率提高到95.2%


本文涉及了C50算法的核心内容,但还有一些不足之处,如根据实际情况修改模型的参数和结合交叉验证法建模。


C50决策树模型有很多优点:

1)模型在面对数据缺失时非常稳健;

2)模型比一些其他类型的模型(支持向量机、神经网络等)易于理解,模型退出的规则有非常直观的解释;

3)提供强大技术以提高分类的精度。


总结一下文中所用到的包和函数:

C50包

C5.0()

summary()

plot()

predict()

table()


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值