r语言决策树c4.5案例,C4.5主要思想与决策树实例

ICDM于2006年底评选数据挖掘十大经典算法,C4.5(分类决策树)居首,前五名算法分别是C4.5, k-Means,

SVM, Apriori,

EM。大部分的算法对我们都很熟悉。C4.5居首主要因为其简单易懂,可解释性强。特别是在企业的具体业务应用过程中,模型的可解释性占有相当大的权重。

本文主要基于R介绍决策树,并简单介绍一下随机森林。

1、决策树简介:

决策树是一颗倒长的树,主要由根节点、分支、叶节点组成,每一个分支是一条规则,主要用于分类。

决策树的算法主要有ID3、C4.5、CART,其中最为流行的事C4.5算法。针对每一种决策树的算法都要解决两个主要问题:

1、选择哪个属性来分裂?

2、什么时候树停止生长?

C4.5之所以流行的原因是:

1、用信息增益率来选择属性分裂

2、构造树的过程中进行剪枝

3、能处理连续型数据和不完整数据

这里主要介绍一下如何选择属性(第一条)分裂对于规则来说是合适的,这就引出“熵”的概念。简而言之,“熵”是对混乱程度的度量,越乱熵越大,这也是为什么我让办公桌乱的原因。与之相对应的概念是“序”,就是有规律。越有序,越纯,熵越小;越乱,熵越大,越不纯;(这对后面理解很有帮助)。

我们从数学的角度来看,(以下图片均来自Introduction to data mining)

熵的计算公式:

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

其中,p(i|t)表示节点t中属于类i所占的比例;

以下为熵和Gini的图表,可以看出在熵和Gini在0.5处值最大,也可以说,数据类别分布倾斜,熵和Gini越少;

a4c26d1e5885305701be709a3d33442f.png

一个计算实例:

a4c26d1e5885305701be709a3d33442f.png

为了确定选择属性的分裂结果,我们用划分前(父节点)的不纯度和划分后(子女节点)的不纯度的差来来衡量属性分裂的测试结果,该指标成为信息增益,也就是熵的差,计算公式如下:

a4c26d1e5885305701be709a3d33442f.png

I(parent)是节点的值不纯性,k是属性的个数,决策树归纳通常选择最大化信息增益的属性做分裂;但是这样做有一个缺点:基于熵和Gini的不纯性的度量趋向于选择类别多的属性做分裂。可以这样理解,二元划分实际上相当于合并了多路属性,这个也可以用公式计算证明。那如何解决这个问题呢?有两种方法:一是限制测试属性只能是二元划分(这是CART的思想),二是修改衡量规则,于是C4.5提出采用信息增益率来划分(终于把第一条说完了),把属性测试产生的输出数也考虑进去,计算公式如下:

a4c26d1e5885305701be709a3d33442f.png

其中,a4c26d1e5885305701be709a3d33442f.png

以上就是C4.5采用信息增益率做属性划分的思想。

2、实例:

以下实例参考了http://www.rdatamining.com/;

数据集iris包含五个指标萼片长度、萼片宽度、花瓣长度、花瓣宽度、三种花类型;

str(iris)

set.seed(1234)

#从iris数据集中随机抽70%定义为训练数据集,30%为测试数据集

ind

prob=c(0.7, 0.3))

trainData

testData

library(party)

#建立决策树模型预测花的种类

myFormula

Petal.Length + Petal.Width

iris_ctree

# 查看预测的结果

table(predict(iris_ctree), trainData$Species)

setosa versicolor virginica

setosa 40 0 0

versicolor 0 37 3

virginica 0 1 31

通过训练数据测试,模型的预测准确性为96.4%;

#输出决策树图

plot(iris_ctree, type="simple")

a4c26d1e5885305701be709a3d33442f.png

testPred

testData)

table(testPred, testData$Species)

在测试集上的准确性为94.4%,模型有较好的泛化能力。

也可以用rparty包做决策树,用rparty代替ctree

rpart(myFormula, data=trainData)

3.模型的误差

一般情况下,我们会把数据分成训练数据集合测试数据集,通过训练数据集训练模型,然后通过测试数据集测试模型。模型在训练数据上的误差叫训练误差,模型在测试数据上的误差成为泛化误差,泛化误差是模型在未知记录上的期望误差。一个好的模型应该有低训练误差和低泛化误差。

一种最常见的情况是,模型在训练数据集上误差小,但是泛化误差大,常称为模型的过度拟合。导致模型过度拟合的原因主要有以下两点:

1、噪声; 2、样本缺乏代表性;

为解决模型的过度拟合问题,我们经常使用对决策树后剪枝的方法,这样需要我们在建立模型的过程中,尽量建立一棵大树,然后基于数据的支持度和业务的理解对树进行剪枝。

在模型选择过程中,相同条件下,我们更倾向于选择简单易解释的模型。 在标注样本量较大的情况下,我们可以通过建立多个模型,并采用N折交叉进行检验,具体可以参考吴老师的《基于R的复杂数据统计方法》。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值