决策树

来源:互联网 发布:tcp 长连接 java 框架 编辑:程序博客网 时间:2024/06/05 21:00

ID3

公式

设D为用类别对训练元组进行的划分,则D的熵(entropy)表示为:

info(D)=i=1npilogpi(1)

现在我们假设将训练元组D按属性A进行划分,则A对D划分的期望信息为:

infoA(D)=i=jv|Dj||D|info(Dj)(2)

信息增益

gain(A)=info(D)infoA(D)(3)

ID3算法就是在每次需要分裂时,计算每个属性的增益率,然后选择增益率最大的属性进行分裂。下面我们继续用SNS社区中不真实账号检测的例子说明如何使用ID3算法构造决策树。

例子

这里写图片描述

其中s、m和l分别表示小、中和大。
设L、F、H和R表示日志密度、好友密度、是否使用真实头像和账号是否真实,下面计算各属性的信息增益:

info(D)=0.7log0.70.3log0.7=0.879

infoL(D)=0.3(13log1323log23)+0.3(1log10log0)+0.4(34log3414log14)=0.603

gainL(D)=0.8790.603=0.276

因此日志密度的信息增益是0.276。
用同样方法得到H和F的信息增益分别为0.033和0.553。
因为F具有最大的信息增益,所以第一次分裂选择F为分裂属性。

C4.5算法

ID3算法存在一个问题,就是偏向于多值属性,例如,如果存在唯一标识属性ID,则ID3会选择它作为分裂属性,这样虽然使得划分充分纯净,但这种划分对分类几乎毫无用处。ID3的后继算法C4.5使用增益率(gain ratio)的信息增益扩充,试图克服这个偏倚。

公式

C4.5算法首先定义了“分裂信息”,其定义可以表示成:

split_infoA(D)=i=jv|Dj||D|log(|Dj||D|)(4)

其中各符号意义与ID3算法相同,然后,增益率被定义为:
gain_ratio(A)=gain(A)split_info(D)(5)

例子

C4.5选择具有最大增益率的属性作为分裂属性,其具体应用与ID3类似,不再赘述。

CART

CART算法采用一种二分递归分割的技术,将当前的样本集分为两个子样本集,使得生成的的每个非叶子节点都有两个分支。因此,CART算法生成的决策树是结构简洁的二叉树。

决策树分为分类决策树(目标变量为分类型数值)和回归决策树(目标变量为连续型变量)。分类决策树叶节点所含样本中,其输出变量的众数就是分类结果;回归树的叶节点所含样本中,其输出变量的平均值就是预测结果。

公式

1)分类:基尼系数:

Gini(P)=i=1nPi(1Pi)=1i=1nP2i(6)

现在我们假设将训练元组D按属性A进行划分,则A对D划分的基尼系数为:

GiniA(D)=j=12|Dj||D|Gini(Dj)(7)

2)回归:回归方差:

σ=i=1n(xiu)2=i=1nx2iu2(8)

u是均值,方差越大,表示该节点的数据越分散,预测的效果就越差。

现在我们假设将训练元组D按属性A进行划分,则A对D划分的回归方差为:

Gain(D)=j=12σ(Dj)(9)

例子

看电视时间 是否已婚 职业 年龄 3 否 学生 12 4 否 学生 18 2 是 老师 26 5 是 上班族 47 2.5 是 上班族 36 3.5 否 老师 29 4 是 学生 21

以属性“职业”为例,一共有三个离散值,“学生”、“老师”、“上班族”。该属性有三种划分的方案,分别为{“学生”}、{“老师”、“上班族”},{“老师”}、{“学生”、“上班族”},{“上班族”}、{“学生”、“老师”},分别计算三种划分方案的子节点GINI值或者样本方差,选择最优的划分方法

第一种划分方法:{“学生”}、{“老师”、“上班族”}
预测是否已婚(分类),根据(7):

Gain=37(1[(13)2+(23)2])+47(1[(14)2+(34)2])=0.4

预测年龄(回归),根据(9):
Gain=122+182+2123[(12+18+21)/3]2+262+472+362+2924[(26+47+36+29)/4]2=34.71

运用相同的算法,求出下面的数据。
第二种划分方法:{“老师”}、{“学生”、“上班族”}:
预测是否已婚(分类),根据(7):

Gain=0.49

预测年龄(回归),根据(9):
Gain=16.36

第三种划分方法:{“上班族”}、{“学生”、“老师”}:
预测是否已婚(分类),根据(7):
Gain=0.34

预测年龄(回归),根据(9):
Gain=21.14

综上,如果想预测是否已婚,则选择{“上班族”}、{“学生”、“老师”}的划分方法,如果想预测年龄,则选择{“老师”}、{“学生”、“上班族”}的划分方法。

剪枝

待续。。。。

原创粉丝点击