机器学习(三)——决策树(Decision Tree)

1 决策树原理

决策树是基于树形结构来进行决策的,目的是产生一颗泛化能力强的决策树,其基本流程遵循简单且直观的分而治之策略。一般的,一颗决策树包含一个根结点、若干内部结点和若干叶结点;其中叶结点对应决策结果,其他结点对应一个属性测试,每个分支代表一个判断结果的输出;每个结点包含的样本集合根据属性测试的结果被划分到子结点中;根节点包含样本全部结点。
在这里插入图片描述

1.1 决策树的构造

对于训练集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x m , y m ) } D=\{(x_1,y_1),(x_2,y_2),\dots,(x_m,y_m)\} D={(x1,y1),(x2,y2),,(xm,ym)}和属性集 A = { a 1 , a 2 , … , a d } A=\{a_1,a_2,\dots,a_d\} A={a1,a2,,ad}

递归构造(D, A):

  1. 生成结点node;
  2. 如果 D D D中样本全部属于同一类别 C C C,那么将node标记未 C C C类叶结点,return;(该步是以当前结点所含样本最多的类别划分,注意与第5步区别)
  3. 如果 A A A为空或者 D D D中样本在 A A A上取值相同,那么将node标记为叶结点,其类别标记为 D D D中样本数最多的类,return;
  4. *从 A A A中选择最优划分属性 a ∗ a_* a(例如,选择属性脐部);
  5. 遍历 a ∗ a_* a中的每一个属性值 a ∗ v a_*^v av(例如脐部属性,属性值有凹陷、稍凹、平坦),并执行如下操作:
    为node生成一个分支;
    D v D_v Dv表示 D D D中在 a ∗ a_* a取值为 a ∗ v a_*^v av的样本子集;
    如果 D v D_v Dv为空,那么将分支结点标记为叶结点,其类别标记为 D D D中样本最多的类,return(例如,脐部凹陷的样本集为空,直接标记为叶结点,类别为好瓜);(该步是以根节点所含样本最多的类别划分,注意与第2步区别)
    否则以 D v D_v Dv a ∗ ∉ A {a_*} \notin A a/A 为分支结点,递归构建下一个结点;
  6. 输出以node为根节点的决策树。

1.2 划分指标

从构造过程可知,决策树学习的关键在于第4步,如何选择最优划分属性。因此这里有两个划分指标:信息增益和基尼(GINI)系数。

1.2.1 信息增益

信息增益衡量的是划分前后信息不确定性程度的减小。而“信息熵”是衡量样本集合纯度最常用的一种指标,“信息熵”越小样本集合的纯度越大。因此我们使用“信息熵”来衡量样本的不确定程度,定义为:
H ( D ) = − ∑ k = 1 ∣ y ∣ p k l o g p k H(D)=-\sum_{k=1}^{|y|}p_klogp_k H(D)=k=1ypklogpk
其中 k k k表示样本的标签, p p p表示该类样本出现的概率。样本集合越纯则 p k p_k pk越大,则 E n t ( D ) Ent(D) Ent(D)越小。

在对样本进行划分时,我们选择属性 a a a,假设该属性有 v v v个可能的取值 { a 1 , a 2 , … , a v } \{a^1,a^2,\dots,a^v\} {a1,a2,,av},那么依此划分会产生 v v v个分支,第 v v v个分支的数据集为 D v D^v Dv,由此可计算出每个分支条件下对应的信息熵,即条件熵:
H ( D ∣ a ) = ∑ a v ∈ a p ( a v ) H ( D ∣ a = a v )    = − ∑ a v ∈ a p ( a v ) ∑ y ∈ Y p ( y ∣ a v ) l o g p ( y ∣ a v ) = − ∑ a v ∈ a ∑ y ∈ Y p ( y , a v ) l o g p ( y ∣ a v )    = − ∑ a v ∈ a , y ∈ Y p ( y , a v ) l o g p ( y , a v ) p ( a v ) = ∑ a v ∈ a , y ∈ Y p ( y , a v ) l o g p ( a v ) p ( y , a v ) H(D|a)=\sum_{a^v\in a}p(a^v)H(D|a=a^v)\\ \qquad\qquad\qquad\qquad\;=-\sum_{a^v\in a}p(a^v)\sum_{y\in Y}p(y|a^v)logp(y|a^v)\\ \qquad\qquad\qquad=-\sum_{a^v\in a}\sum_{y\in Y}p(y,a^v)logp(y|a^v)\\ \qquad\qquad\qquad\;=-\sum_{a^v\in a,y\in Y}p(y,a^v)log\frac{p(y,a^v)}{p(a^v)}\\ \qquad\qquad\quad=\sum_{a^v\in a,y\in Y}p(y,a^v)log\frac{p(a^v)}{p(y,a^v)} H(Da)=avap(av)H(Da=av)=avap(av)yYp(yav)logp(yav)=avayYp(y,av)logp(yav)=ava,yYp(y,av)logp(av)p(y,av)=ava,yYp(y,av)logp(y,av)p(av)
信息增益定义为信息熵与条件熵的差值,即父亲节点的信息熵减去所有子节点归一化条件下的信息熵
I G = H ( D , a ) = H ( D ) − H ( D ∣ a ) IG=H(D,a)=H(D)-H(D|a) IG=H(D,a)=H(D)H(Da)
信息增益IG越大,说明使用该特征划分数据所获得的信息量变化越大,子节点的样本“纯度”越高。

因此,属性选择为:
a ∗ = a r g    m a x a ∈ A    H ( D , a ) a_* =arg\;max_{a\in A}\;H(D,a) a=argmaxaAH(D,a)

1.2.2 基尼(GINI)系数

同样的,我们可以使用基尼系数衡量样本集合的不纯度。
G i n i = 1 − ∑ p i 2 Gini = 1 - \sum{p_i^2} Gini=1pi2
当我们划分时,计算使用当前属性 a a a划分的基尼系数:
G i n i a = ∑ a ∈ A p ( A = a ) [ 1 − ∑ p i 2 ] Gini_a = \sum_{a\in A}p(A=a)[1 - \sum{p_i^2}] Ginia=aAp(A=a)[1pi2]
一般来说,我们选择使得划分后Gini指数最小的特征(注意这里是直接根据Gini指数进行判断,而并非其变化量):
a ∗ = a r g    m i n a ∈ A    G i n i a a_* =arg\;min_{a\in A}\;Gini_a a=argminaAGinia

1.3 决策树种类

1.3.1 ID3

使用信息增益作为划分指标。

1.3.2 C4.5

ID3越细小的分割分类错误率越小,所以ID3会越分越细,但是这会导致过度学习。基于此C4.5对ID3进行了改进,使用信息增益率作为划分指标。如果分割太细那么增益率的分母就会增加,信息增益率会降低,其他的构建过程和ID3相同。
信息增益率定义为:
H r a t i o ( D , a ) = H ( D , a ) I V ( a ) I V ( a ) = − ∑ a v ∈ a p ( a v ) l o g p ( a v ) = − ∑ a v ∈ a ∣ D v ∣ ∣ D ∣ l o g ∣ D v ∣ ∣ D ∣ H_ratio(D,a)=\frac{H(D,a)}{IV(a)}\\ IV(a)=-\sum_{a^v \in a}p(a^v)logp(a^v)=-\sum_{a^v \in a}\frac{|D^v|}{|D|}log\frac{|D^v|}{|D|} Hratio(D,a)=IV(a)H(D,a)IV(a)=avap(av)logp(av)=avaDDvlogDDv

1.3.3 CART

CART叫分类回归树,它是一种二叉树。使用基尼系数(Gini)作为划分指标。CART与ID3有相同的问题,可能导致划分太细导致过度学习。

2 剪枝处理

前面已经说过决策树可能会划分过细,导致过度学习,此时可以使用剪枝技术进行处理,防止过拟合。剪枝技术可分为“预剪枝”和“后剪枝”。

2.1 预剪枝

预剪枝是指在决策树生成个过程中,对每个结点在划分前先进行评估,若当前结点的划分不能带来决策树泛化性能的提升,则停止划分,并将当前结点标记为叶结点,类别标记为当前结点样本集合中样本数最多的类别。

2.2 后剪枝

后剪枝是指先从训练集生成一颗完整的决策树,然后自底向上地对非叶子结点进行评估,若该结点对应地子树被替换为叶结点能带来泛化性能地提升,则将该子树替换为叶结点。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值