决策树是构建树型分类器来实现回归或者分类任务,具有可解释性强,简单易理解等优点。决策树是一个有监督的机器学习模型。决策树的基本思想是每次选择一个属性作为划分标准,且这个经过这个属性划分后模型的熵要降低的最多。熵降低的越快越好,生成的决策树高度也越浅。
熵定义为事件可能性的分散程度,也就是事件的确定性。当事件发生的可能性越分散时,事件不确定性越强,信息熵的越大。
下面举两个例子来帮助我们理解这一个概念。我们有事件A,事件A发生的有5种可能,每种可能发生的概率为 1 5 \frac{1}{5} 51。而事件B只有两种可能,每种可能发生的概率为 1 2 \frac{1}{2} 21。在这个例子中,我们可以发现,事件B发生的纯度远远高于事件A,也就是说事件B的信息熵更小。基于此例我们给出对于样本集合D信息熵的定义,其中样本中基于属性a划分有K种可能:
E n t ( D ) = − ∑ k = 1 K p k l o g p k Ent(D)=-\sum_{k=1}^Kp_{k}logp_{k} Ent(D)=−k=1∑Kpklogpk
同样的,我们也可以用Gini系数来衡量事件的纯度,Gini系数越大,事件的纯度越低。
G i n i ( D ) = ∑ k = 1 K p k ( 1 − p k ) = 1 − ∑ k = 1 K p k 2 Gini(D)=\sum_{k=1}^Kp_{k}(1-p_{k})=1-\sum_{k=1}^Kp_{k}^{2} Gini(D)=k=1∑Kpk(1−pk)=1−k=1∑Kpk2
ID3决策树采用信息增益作为划分标准。假如某个离散属性a具有V种可能的取值 { a 1 , a 2 , a 3 , . . . , a V } \{a^1,a^2,a^3,...,a^V\} {a1,a2,a3,...,aV}。则我们定义基于属性a划分的信息增益为:
G a i n ( a , D ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) Gain(a,D)=Ent(D)-\sum_{v=1}^V\frac{|D_v|}{|D|}Ent(D_v) Gain(a,D)=Ent(D)−v=1∑V∣D∣∣Dv∣Ent(Dv)
我们先计算所有属性的信息增益,选择信息增益最大的那个属性作为根节点来进行划分,并且对划分出的样本在剩下的属性中进行和上面一样的迭代操作,直至构建好的决策树满足预剪枝的条件即停止生成。
C4.5决策树采用信息增益比来作为划分标准,是ID3决策树的改进。为什么要对ID3进行改进呢?假设存在这样一个属性,它的可能性非常多,但是每个可能性的样本个数很少(考虑极端情况每个可能性只有一个样本),在这种情况下基于该属性划分之后样本的信息熵为零,样本信息增益最大,但是实际情况中我们不可能基于该属性来进行决策树的构建(每种可能性样本太少)。因此在这种情况下,我们引入信息增益比来作为C4.5决策树的划分标准。信息增益比等于信息增益除以该属性的信息熵。
G a i n _ r a t i o ( a , D ) = G a i n ( a , D ) I V ( a ) Gain\_ratio(a,D)=\frac{Gain(a,D)}{IV(a)} Gain_ratio(a,D)=IV(a)Gain(a,D)
其中 I V ( a ) IV(a) IV(a)为属性a的信息熵,假设属性a有V种可能,每种可能对应有 D v D_v Dv个样本,总共有D个样本。则有:
I V ( a ) = − ∑ v = 1 V D v D l o g D v D IV(a)=-\sum_{v=1}^V\frac{D_v}{D}log\frac{D_v}{D} IV(a)=−v=1∑VDDvlogDDv
我们采用预剪枝操作对模型进行剪枝。预剪枝即构建模型过程种提前停止。例如,我们可以设置一个阈值,当节点中的样本数目少于这个阈值时,停止对这一节点的划分。又或者当模型的深度大于某个预先设定好的值时,我们停止树的生成。
CART决策树的以基尼指数来选择属性,属性a的基尼指数定义为:
G i n i _ i n d e x ( a , D ) = ∑ v = 1 V D v D G i n i ( D v ) Gini\_index(a,D)=\sum_{v=1}^V\frac{D_v}{D}Gini(D_v) Gini_index(a,D)=v=1∑VDDvGini(Dv)
损失函数定义为:
C α = C T + α ∣ T l e a f ∣ C_\alpha=C_T+\alpha|T_{leaf}| Cα=CT+α∣Tleaf∣
其中:
C T = ∑ t ∈ l e a f N t H ( t ) C_T=\sum_{t\in leaf}N_tH(t) CT=t∈leaf∑NtH(t)
N t N_t Nt是当前叶子节点包含的样本个数, H ( t ) H(t) H(t)是当前叶子节点的熵值。如果 C T C_T CT越小,说明我们的分类器的叶子节点纯度越高。 T l e a f T_{leaf} Tleaf是分类器的叶子节点的个数。
我们采用后剪枝的策略对决策树进行剪枝,主要思想是基于最小化上面的损失函数。 α \alpha α权衡着模型对训练数据的拟合程度与模型本身复杂度两者之间的关系。
考虑极端情况:
假设 α \alpha α为零时,对于叶子节点没有惩罚,因此整体树(不进行剪枝)的树是最优的。
假设 α \alpha α趋近于无穷大,对于子树节点数目具有极大的惩罚力度,迫使模型不断进行剪枝,此时仅仅由根节点构成的单节点树是最优的。
对于固定的参数 α \alpha α,我们只能得到有且仅有一个最优子树。