基于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,根据统计学正态分布假设,该观测错误率的置信区间为:
C5.0算法默认的置信水平为0.25。根据以上公式可知,当置信水平越高时,临界值z就越低,即真实误差就越低。
“减少-损失”法:该方法结合损失矩阵对树进行剪枝,核心思想是比较剪枝前后损失量,如果剪枝后的损失要小于剪枝前的损失,则剪枝,否则不剪枝。
损失矩阵就是一种"惩罚"矩阵,即误判所带来的损失,矩阵的行和列与输出变量的水平的个数一致,行代表预测情况,列代表实际情况。
有关损失值的计算如下:
最后再介绍一下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)
summary()函数返回模型的决策树规则、误判率和变量选择
模型预测:
从上图可知模型的预测准确率还是非常高的(C5.0已经对模型做了剪枝工作),达到了94.7%。
接下来看看C50中的Boosting技术,通过该技术可以建立一个稳健的模型。这里设置迭代的次数为10。
本文涉及了C50算法的核心内容,但还有一些不足之处,如根据实际情况修改模型的参数和结合交叉验证法建模。
C50决策树模型有很多优点:
1)模型在面对数据缺失时非常稳健;
2)模型比一些其他类型的模型(支持向量机、神经网络等)易于理解,模型退出的规则有非常直观的解释;
3)提供强大技术以提高分类的精度。
总结一下文中所用到的包和函数:
C50包
C5.0()
summary()
plot()
predict()
table()