机器学习——决策树基础知识

82 阅读1分钟

决策树可以将决策过程形象化成一棵树,在每个分岔处做出判断,前往下一个分岔,直至最终的叶子节点。

1、ID3决策树

ID3决策树是以信息增益为准则来划分属性。

假设当前样本集合DD,其中第kk(这里的类,是我们拿到一个新样本要去判断属于哪个类,比如拿到一个西瓜去判断属于好瓜还是坏瓜,这里k=1,2k=1,2) 样本所占的比例为pkp_k,则DD信息熵定义为:

Ent(D)=k=1pklog2pkEnt(D) = - \sum\limits_{k = 1} {{p_k}{{\log }_2}{p_k}}

假定离散属性aaVV个可能的取值{a1,...,aV}\{a^1,...,a^V\},若使用aa来对样本集合进行划分,其中第vv个分支节点包含了DD中所有在属性aa上取值为ava^v的样本,这些样本集合记为DvD^v。则我们可以得到每个属性对应的样本集合的信息熵Ent(Dv)Ent(D^v),共有VV个。考虑到不同的分支节点所包含的样本数量不同,给予分支节点不同的权重Dv/D|{D^v}|/|D|,即各个样本集合与总样本集合的数量之比。即样本数越多的分支结点的影响越大,于是可以计算出属性aa对样本集DD进行划分所获得的信息增益:

Gain(D,a)=Ent(D)v=1VDvDEnt(Dv)Gain(D,a) = Ent(D) - \sum\limits_{v = 1}^V {\frac{{|{D^v}|}}{{|D|}}Ent({D^v})}

若有mm个属性 aa^ * ,则计算得到m个属性对应的m个信息增益。我们选择信息增益最大值对应的属性aa来进行划分。

则构建ID3决策树的流程:

  1. 计算Ent(D)Ent(D)
  2. 计算 VV 个属性的信息增益,选择信息增益最大的属性来做划分。例如该属性有3种取值,则会得到D1,D2,D3D^1,D^2,D^3
  3. 计算 Ent(Di)Ent(D^i),for i = 1,2,3.
  4. 计算V1V-1个属性的信息增益,选择信息增益最大的属性来做划分。
  5. 重复上述流程,直至某个属性下只包含一种类别。

2、C4.5决策树

信息增益准则对于可取值数目多的属性有所偏好,为减少这种偏好可能带来的不利影响,C4.5决策树改用增益率来选择最优划分属性。增益率定义为:

Gain_ratio(D,a)=Gain(D,a)IV(a),Gain\_ratio(D,a) = \frac{{Gain(D,a)}}{{IV(a)}},

IV(a)=v=1VDvDlog2DvD.IV(a) = - \sum\limits_{v = 1}^V {\frac{{\left| {{D^v}} \right|}}{{|D|}}{{\log }_2}\frac{{\left| {{D^v}} \right|}}{{|D|}}.}

第二个式子称为属性aa的固有值。aa的取值越多,IV(a)IV(a)的值通常越大。所以C4.5算法可能会偏向于可取值较少的属性。

3、CART决策树

CART决策树使用基尼系数来选择划分属性,数据集DD的纯度可用基尼值来度量:

Gini(D)=k=1kkpkpk=1k=1pk2Gini(D) = \sum\limits_{k = 1} {\sum\limits_{k' \ne k} {{p_k}{p_{k'}}} } = 1 - \sum\limits_{k = 1} {p_k^2}

Gini(D)Gini(D)反映了从数据集DD中随机抽取两个样本,其类别标记不一致的概率大小。因此Gini(D)Gini(D)越小,则数据集的纯度越高。

属性a的基尼指数定义为:

Gini_index(D,a)=v=1VDvDGini(Dv).Gini\_index(D,a) = \sum\limits_{v = 1}^V {\frac{{|{D^v}|}}{{|D|}}Gini({D^v})} .

我们在候选属性集合中,选择使得划分后基尼指数最小的属性作为最优划分属性。

4、剪枝处理——处理过拟合

为了防止决策树分支过多导致过拟合。可以主动去掉一些分支来降低过拟合风险。

4.1、预剪枝

首先将一部分数据分为训练数据,剩下的数据分为测试数据。 在每一步进行属性划分时,用测试数据比较分类后的准确率是增加了还是减少了,如果增加了就进行划分,如果没有增加(减少或者不变)就不进行划分。

4.2、后剪枝

后剪枝先要生成一棵完整的决策树。从最末端的节点开始,比较去除该节点与不去除该节点决策树整体的准确率是上升还是下降,如果上升就去除该结点,如果不上升(下降或者不变)就不删除该结点。然后依次往上判断是否删除某个结点。

5、连续与缺失值

5.1、连续值处理

给定样本集DD和连续属性aa,假定aaDD上出现了nn个不同的取值,将这些值从小到大排序,记为{a1,...,an}.\{a^1,...,a^n\}.基于划分点tt可以将DD分为DtD_t^-Dt+D_t^+。考察包含n1n-1个元素的候选划分点集合

Ta={ai+ai+121in1},{T_a} = \left\{ {\frac{{{a^i} + {a^{i + 1}}}}{2}|1 \le i \le n - 1|} \right\},

然后我们像考虑离散属性一样来考察这些划分点,选取最优的划分点进行样本集合划分:

Gain(D,a)=maxtTaGain(D,a,t)=maxtTaEnt(D)λ{,+}DtλDEnt(Dtλ)Gain(D,a) = \mathop {\max }\limits_{t \in {T_a}} Gain(D,a,t) = \mathop {\max }\limits_{t \in {T_a}} Ent(D) - \sum\limits_{\lambda \in \{ - , + \} } {\frac{{|D_t^\lambda |}}{{|D|}}Ent(D_t^\lambda )}

其中Gain(D,a,t)Gain(D,a,t)是样本集DD基于划分点tt二分后的信息增益。得到该连续属性a的信息增益后,继续计算剩下属性的信息增益,按照ID3决策树的流程正常进行。不过,连续属性可以作为其后代结点的划分属性。

5.2、缺失值处理

给定样本集DD和连续属性aa,令D~\widetilde D表示DD中在属性aa中没有缺失值的样本子集,假定我们为每个样本xx赋予一个权重wxw_x,并定义

ρ=xD~wxxDwx,\rho = \frac{{\sum\nolimits_{x \in \widetilde D} {{w_x}} }}{{\sum\nolimits_{x \in D} {{w_x}} }},

p~k=xD~kwxxD~wx,{\widetilde p_k} = \frac{{\sum\nolimits_{x \in {{\widetilde D}_k}} {{w_x}} }}{{\sum\nolimits_{x \in \widetilde D} {{w_x}} }},

r~v=xD~vwxxD~wx,{\widetilde r_v} = \frac{{\sum\nolimits_{x \in {{\widetilde D}^v}} {{w_x}} }}{{\sum\nolimits_{x \in \widetilde D} {{w_x}} }},

基于上述定义,我们将信息增益的计算式推广为:

Gain(D,a)=ρ×Gain(D~,a)=ρ×(Ent(D~)v=1Vr~vEnt(D~v))Gain(D,a) = \rho \times Gain(\widetilde D,a) = \rho \times \left( {Ent(\widetilde D) - \sum\limits_{v = 1}^V {{{\widetilde r}_v}Ent({{\widetilde D}^v})} } \right)

若样本xx在属性aa上的取值已知,则将其划入与其取值对应的子节点上,且样本全职在子节点中保持为wxw_x。若样本xx在划分属性aa上的取值未知,则将xx同时划入所有子节点,且样本权值在与属性值ava^v对应的子结点中调整为r~vwx{\widetilde r_v} \cdot {w_x}。直观的看,就是让同一个样本以不同的概率划分到不同的子结点中去。

6、多变量决策树

在此类决策树中,非叶结点不再是仅对某个属性,而是对属性的线性组合进行测试,即每个非叶结点是一个形如i=1dwiai=t\sum\nolimits_{i = 1}^d {{w_i}{a_i}} = t的线性分类器,其中wiw_i是属性aia_i的权重。