决策树是一种常用于解决分类问题的简单机器学习算法。
决策树是由一系列节点组成的,每一个节点代表一个特征和相应的决策规则。决策过程很简单,一个简单的例子如下图所示:
1. 如何构建决策树?
决策树的构建过程就是选取特征和确定决策规则的过程。那我们该怎样决定首先选择哪个特征进行决策呢?
ID3算法
最早比较著名的决策树构建方法是ID3。通过选择有辨别力的特征对数据进行划分,直到每个叶节点上只包含单一类型的数据为止。
ID3算法的基础是Shannon信息论中定义的熵(entropy)。信息论告诉我们,如果一个事件有
k
k
k中可能的结果,每种结果对应的概率为
P
i
,
i
=
1
,
.
.
.
,
k
P_i, i=1,...,k
Pi,i=1,...,k,则我们对此事件的结果观察后得到的信息量可以用如下定义的熵来度量
I
=
−
(
P
1
l
o
g
2
P
1
+
P
2
l
o
g
2
P
2
+
.
.
.
+
P
k
l
o
g
2
P
k
)
=
−
∑
i
=
1
k
P
i
l
o
g
2
P
i
I=-(P_1log_2P_1+P_2log_2P_2+...+P_klog_2P_k)=-\sum_{i=1}^kP_ilog_2P_i
I=−(P1log2P1+P2log2P2+...+Pklog2Pk)=−i=1∑kPilog2Pi
比如,如果
k
=
4
k=4
k=4,在当前节点上包含的样本属于四类的概率都是0.25,则
I
=
−
(
4
∗
0.25
∗
l
o
g
2
0.25
)
=
2
I=-(4*0.25*log_20.25)=2
I=−(4∗0.25∗log20.25)=2。
在构建决策树时,应依次选择能够使划分后具有最小熵的特征对数据进行划分。这就叫做最小熵策略。
流程为:首先计算当前节点包含的所有样本的熵,比较采用不同特征进行分枝将会得到的信息增益即不确定性介绍量,选取具有最大信息增益的特征赋予当前节点,该特征的取值个数决定了该节点下的分支数目;如果后继节点只包含一类样本,则停止该枝的生长,该节点成为叶节点;如果后继节点仍包含不同类样本,则再次进行以上步骤,直到每一枝都达到叶节点为止。(摘自原书)
C4.5算法
与ID3相比,C4.5算法采用的信息增益率代替信息增益公式:
Δ
I
R
(
N
)
=
Δ
I
(
N
)
I
(
N
)
\Delta I_R(N)=\frac{\Delta I(N)}{I(N)}
ΔIR(N)=I(N)ΔI(N)
并且C4.5算法还增加了处理连续的数值特征的功能。基本做法是:若数值特征
x
x
x在训练集里共包含
n
n
n个取值,将它们排序后,得到
v
i
,
i
=
1
,
.
.
.
,
n
v_i, i=1,...,n
vi,i=1,...,n;用二分法选择阈值把这组数据划分,共有
n
−
1
n-1
n−1种可能的划分方案;对每一种方案计算信息增益率,选择增益率最大的方案把该连续特征离散化为二值特征,再与其它非数值特征一起构建决策树。
CART算法
CART(Classification And Regression Tree):分类和决策树算法。其核心思想与ID3和C4.5相同,主要不同在于,CART在每一个节点上都采用二分法,即每个节点都只能有两个子节点,最后构成的是二叉树;CART既可用于分类也可用于回归。
2. 过拟合与决策树的剪枝
决策树方法可以有效地构造出分类决策树。但当样本量有限时,把所有训练样本全部正确划分为准则建立的决策规则容易导致过拟合,即模型在测试集上表现很差。
我们可以通过剪枝的策略降低决策树模型的过拟合现象。剪枝分为两种:先剪枝和后剪枝。
先剪枝
先剪枝就是要控制决策树的生长,即在决策树生长过程中决定某节点是否需要继续分枝还是直接作为叶节点。一旦某节点被判断为叶节点后,则该分枝停止生长。
通常判断停止生长的方法有三种:数据划分法、阈值法和信息增益的统计显著性分析。
后剪枝
后剪枝是指决策树得到充分生长后在对其进行修剪。后剪枝的核心思想是对一些分枝进行合并,它从叶节点出发,如果消除具有相同父节点的叶节点后不会导致熵的明显增加则执行消除,并以其父节点作为新的叶节点。如此不断地从叶节点往上进行回溯,直到合并操作不再合适为止。
常用的剪枝规则也有三种:减少分类错误修剪法、最小代价与复杂性的折中和最小描述长度准则。
由于决策树的生长过程采用的是贪婪算法,没有全局概念,先剪枝可能导致树生长的提前终止。后剪枝的计算代价较大。
C4.5和CART算法中都包含了用后剪枝策略对决策树进行修剪的功能。
随机森林
随机森林就是建立很多决策树,组成一个决策树"森林",通过多棵树投票来进行决策。
基于数据的模式识别方法都面临一个共同的问题,就是数据的随机性问题。方法的任何一次实现都是基于一个特定的数据集的,这个数据集只是所有可能的数据中的一次随机抽样,训练得到的分类器也具有一定的偶然性,在样本量比较小时尤其如此。
Bootstrap:枚举法,其基本思想是通过对现有样本进行又放回地重采样产生多个样本集,用来模拟数据的随机性。
随机森林构造的三个基本步骤如下:
1)对样本进行bootstrap重采样,即每次从原来的
N
N
N个训练样本中又放回地随机抽取
N
N
N个样本;
2)分别用每个重采样样本集作为训练样本构造一个决策树。在构造决策树的过程中,每次从所有候选特征中随机地抽取
m
m
m个特征,作为当前节点下决策的备选特征,从这些特征中选择最好地划分训练样本的特征;
3)得到所需数目的决策树后,对这些决策树的输出进行投票,以得票最多的类作为随机森林的决策。
原理示意图如下:
Boosting
简单讲讲我对boosting算法的理解。
Boosting方法通过整合多个简单的弱分类器来提高模型的最终分类性能。然而,boosting方法不是简单地对多个分类器的输出进行投票决策,在每一次迭代过程中,根据分类情况对各个样本进行加权——对上一轮分类错误的样本分配更高的权重,而不仅仅是简单的重采样。
注:如无特殊说明,以上大部分内容为摘选自张学工所著《模式识别》。