【十大经典数据挖掘算法】系列php
决策树(decision tree)算法基于特征属性进行分类,其主要的优势:模型具备可读性,计算量小,分类速度快。决策树算法包括了由Quinlan提出的ID3与C4.5,Breiman等提出的CART。其中,C4.5是基于ID3的,对分裂属性的目标函数作出了改进。html
决策树是一种经过对特征属性的分类对样本进行分类的树形结构,包括有向边与三类节点:node
上图给出了(二叉)决策树的示例。决策树具备如下特色:算法
决策树学习的本质是从训练数据集中概括出一组分类规则[2]。但随着分裂属性次序的不一样,所获得的决策树也会不一样。如何获得一棵决策树既对训练数据有较好的拟合,又对未知数据有很好的预测呢?函数
首先,咱们要解决两个问题:学习
特征选择指选择最大化所定义目标函数的特征。下面给出以下三种特征(Gender, Car Type, Customer ID)分裂的例子:测试
图中有两类类别(C0, C1),C0: 6
是对C0类别的计数。直观上,应选择Car Type特征进行分裂,由于其类别的分布几率具备更大的倾斜程度,类别不肯定程度更小。ui
为了衡量类别分布几率的倾斜程度,定义决策树节点\(t\)的不纯度(impurity),其知足:不纯度越小,则类别的分布几率越倾斜;下面给出不纯度的的三种度量:spa
\begin{equation}
Entropy(t)=-\sum\limits_{k}p(c_k|t)\log p(c_k|t)
\end{equation}code
\begin{equation}
Gini(t)=1-\sum\limits_{k}[p(c_k|t)]^2
\end{equation}
\begin{equation}
Classification error(t)=1-\mathop{\max}\limits_{k} [p(c_k|t)]
\end{equation}
其中,\(p(c_k|t)\)表示对于决策树节点\(t\)类别\(c_k\)的几率。这三种不纯度的度量是等价的,在等几率分布是达到最大值。
为了判断分裂先后节点不纯度的变化状况,目标函数定义为信息增益(information gain):
\begin{equation}
\Delta = I(parent) - \sum\limits_{i=1}^{n}{N(a_i)\over N}I(a_i)
\end{equation}
\(I(\cdot)\)对应于决策树节点的不纯度,\(parent\)表示分裂前的父节点,\(N\)表示父节点所包含的样本记录数,\(a_i\)表示父节点分裂后的某子节点,\(N(a_i)\)为其计数,\(n\)为分裂后的子节点数。
特别地,ID3算法选取熵值做为不纯度\(I(\cdot)\)的度量,则
\[ \begin{aligned} \Delta & = H(c)-\sum\limits_{i=1}^{n}{N(a_i)\over N}H(c|a_i) \cr &=H(c)-\sum\limits_{i}^{n} p(a_i)H(c|a_i)\cr & = H(c)-H(c|A) \cr \end{aligned} \]
\(c\)指父节点对应全部样本记录的类别;\(A\)表示选择的特征属性,即\(a_i\)的集合。那么,决策树学习中的信息增益\(\Delta\)等价于训练数据集中类与特征的互信息,表示因为得知特征\(A\)的信息训练数据集\(c\)不肯定性减小的程度。
在特征分裂后,有些子节点的记录数可能偏少,以致于影响分类结果。为了解决这个问题,CART算法提出了只进行特征的二元分裂,即决策树是一棵二叉树;C4.5算法改进分裂目标函数,用信息增益比(information gain ratio)来选择特征:
\begin{equation}
Gain ratio = {\Delta \over Entropy(parent)}
\end{equation}
于是,特征选择的过程等同于计算每一个特征的信息增益,选择最大信息增益的特征进行分裂。此即回答前面所提出的第一个问题(选择较优特征)。ID3算法设定一阈值,当最大信息增益小于阈值时,认为没有找到有较优分类能力的特征,没有往下继续分裂的必要。根据最大表决原则,将最多计数的类别做为此叶子节点。即回答前面所提出的第二个问题(中止分裂条件)。
ID3算法的核心是根据信息增益最大的准则,递归地构造决策树;算法流程以下:
C4.5算法流程与ID3相相似,只不过将信息增益改成信息增益比。
生成的决策树对训练数据会有很好的分类效果,却可能对未知数据的预测不许确,即决策树模型发生过拟合(overfitting)——训练偏差(training error)很小、泛化偏差(generalization error,亦可看做为test error)较大。下图给出训练偏差、测试偏差(test error)随决策树节点数的变化状况:
能够观察到,当节点数较小时,训练偏差与测试偏差均较大,即发生了欠拟合(underfitting)。当节点数较大时,训练偏差较小,测试偏差却很大,即发生了过拟合。只有当节点数适中是,训练偏差居中,测试偏差较小;对训练数据有较好的拟合,同时对未知数据有很好的分类准确率。
发生过拟合的根本缘由是分类模型过于复杂,可能的缘由以下:
为了解决过拟合,C4.5经过剪枝以减小模型的复杂度。[2]中提出一种简单剪枝策略,经过极小化决策树的总体损失函数(loss function)或代价函数(cost function)来实现,决策树\(T\)的损失函数为:
\[ L_\alpha (T)=C(T)+\alpha \left| T \right| \]
其中,\(C(T)\)表示决策树的训练偏差,\(\alpha\)为调节参数,\(\left| T \right|\)为模型的复杂度。当模型越复杂时,训练的偏差就越小。上述定义的损失正好作了二者之间的权衡。
若是剪枝后损失函数减小了,即说明这是有效剪枝。具体剪枝算法能够由动态规划等来实现。
[1] Pang-Ning Tan, Michael Steinbach, Vipin Kumar, Introduction to Data Mining. [2] 李航,《统计学习方法》. [3] Naren Ramakrishnan, The Top Ten Algorithms in Data Mining.