决策树
1.决策树模型与学习
1.1.决策树模型
分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点和有向边组成。结点有两种类型:内部节点和叶节点。内部结点表示一个特征或属性,叶结点表示一个类。
下面是一个决策树的示意图。图中圆和方框分别表示内部结点和叶节点。
1.2.决策树与if-then规则
决策树模型可以看作一个if-then规则的集合,由根结点到叶节点的每一条路径构建一条规则;路径上内部结点的特征对应着规则的条件,而叶结点的类对应着规则的结论。
1.3.决策树与条件概率分布
将特征空间(输入变量的取值范围)划分为互不相交的单元(根节点到叶节点的一条路径)或者区域,并在每个单元定义一个类的概率分布就构成了一个条件概率分布,分类时将样本分到条件概率大的那一类去。
1.4.决策树的学习
决策树选择最优特征将训练集分割成子集,如此递归直到所有训练数据子集基本正确分类,或者没有合适的特征为止。但这种方法对训练数据分类能力好,可能对未知的测试数据效果不好,所以需要剪枝过程,如果特征太多,也可以在构建决策树之前进行特征选择,留下有足够分类能力的特征。
决策树的学习算法包括特征选择、决策树的生成和决策树的剪枝过程。目的是构造一棵泛化能力强,即处理待测样本或新样本能力强的决策树,遵循从顶向下、分而治之的策略。决策树常用的算法有ID3、C4.5和CART,将会在后面进行介绍。
2.特征选择
特征选择的准则有信息增益或信息增益比。
2.1信息增益
谈到信息增益,必须谈到随机变量不确定性的度量-熵,可以理解为样本类别的混乱度,样本都是同一类,熵为0,样本的类别乱七八糟,熵就很大。熵的表达式如下,t为计算熵的结点,c为结点属性值的个数,p(i)为第i个属性值在结点t中所占的比例。
E
n
t
r
o
p
y
(
t
)
=
−
∑
i
=
1
c
p
(
i
)
log
2
p
(
i
)
Entropy(t) = - \sum\limits_{i = 1}^c {p(i){{\log }_2}} p(i)
Entropy(t)=−i=1∑cp(i)log2p(i)根据特征A对训练集D分割,训练集D的熵与分割后的各子集熵的加权和的差值作为特征A的信息增益,其他特征也同样求信息增益,最终采用信息增益最大的特征作为划分属性。此时的决策树为ID3。
信息增益的表达式如下,其中
I
(
p
a
r
e
n
t
)
{\rm I}(parent)
I(parent)是父亲结点的不纯度度量(可采用熵、基尼指数和误分类率),
k
k
k是当前属性的属性值数量,
N
(
j
)
N(j)
N(j)是第个儿子结点上样本的数目,
N
N
N是父亲结点上样本的数目,
I
(
j
)
I(j)
I(j)是第个儿子结点的不纯度度量。
Δ
I
=
I
(
p
a
r
e
n
t
)
−
∑
j
=
1
k
N
(
j
)
N
I
(
j
)
\Delta {\rm I} = {\rm I}(parent) - \sum\limits_{j = 1}^k {\frac{{N(j)}}{N}} I(j)
ΔI=I(parent)−j=1∑kNN(j)I(j)
2.2信息增益比
由于信息增益偏好属性值较多的属性,引入增益比可以减少这种影响,记为 G a i n R a t i o GainRatio GainRatio,此时的决策树成为C4.5决策树,信息增益比的计算公式如下所示: G a i n R a t i o = Δ inf o S p l i t inf o GainRatio = \frac{{\Delta \inf o}}{{Split\inf o}} GainRatio=SplitinfoΔinfo其中 Δ i n f o Δinfo Δinfo是信息增益, S p l i t inf o {Split\inf o} Splitinfo是分裂信息,即对应属性的熵,可用于惩罚属性值较多的属性(属性值越多,熵越大,所以比值会减小),阻碍选择属性值较均匀分布的属性,比如学号,显然学号作为最佳划分的属性不是一个好的选择。
3.决策树的生成
- ID3的核心是在决策树的各个结点上应用信息增益准确选择特征,递归构建决策树。
- C4.5在ID3的基础上,用信息增益比代替信息增益,减少了信息增益偏好属性值较多的属性的影响。
4.决策树的剪枝
- 决策树生成算法递归地产生决策树,直到不能继续下去为止,这样产生的树往往过拟合,解决这个问题的方法是降低树的复杂度,即进行剪枝。
- 剪枝往往通过极小化决策树整体的的损失函数,损失函数加入了正则化项,通过 α \alpha α控制树的规模。 C α ( T ) = C ( T ) + α ∣ T ∣ C_{\alpha}(T)=C(T)+\alpha|T| Cα(T)=C(T)+α∣T∣式子中, C ( T ) C(T) C(T)表示模型对训练数据的预测误差,即模型与训练数据的拟合程度, ∣ T ∣ |T| ∣T∣代表模型复杂度,参数 α ≥ 0 \alpha≥0 α≥0控制两者之间的影响。较大的 α \alpha α促使选择较简单的模型(树),较小的 α \alpha α促使选择较复杂的模型(树)。 α \alpha α=0只考虑模型与训练数据的拟合程度,不考虑模型的复杂度。
- 剪枝就是当 α \alpha α确定时,选择损失函数最小的模型,即损失函数最小的子树,上述损失函数考虑了对训练数据的拟合程度和模型复杂度的平衡。 剪枝从叶子结点向上回缩,计算回缩前后两棵子树的损失函数,若回缩后的损失函数更小,即执行剪枝。可以看出,计算过程只考虑两棵子树的损失函数的差,其计算可以在局部进行,所以决策树的剪枝算法可以由动态规划实现,当前子树的损失函数的值可以用在下一次计算损失函数的求和中。
5.CART算法
分类和回归树(CART)模型也由特征选择、树的生成及剪枝组成,既可以用于分类也可以用于回归。
CART是在给定输入随机变量X条件下输出随机变量Y的条件概率分布的学习方法。CART假设决策树是二叉树,内部结点特征的取值为是或者否,左分支是取值为是的分支,右分支是取值为否的分支。这样的决策树等价于递归地二分每个特征,将输入空间(就是特征的取值范围)即特征空间划分为有限个单元(根节点到叶节点的一条路径),并在这些单元上预测的概率分布,也就是在输入给定的条件下输出的条件概率分布。
CART算法由以下两步组成:
- 决策树生成:基于训练数据生成决策树,生成的决策树要尽量大。
- 决策树剪枝:用验证集对已生成的树进行剪枝并选择最优子树,这是也用损失函数最小作为剪枝的标准。
5.1CART生成
决策树的生成就是递归地构建二叉决策树的过程。对回归树用平方误差最小化准则,所以也被成为最小二乘法回归树,还记得拟合吗,也是用最小二乘法,即用平方误差计算预测值和真实值间的距离。对分类树用基尼指数最小化准则,进行特征选择,生成二叉树。
5.1.1回归树的生成
在训练数据集所在的输入空间中,递归地将每个区域划分为两个子区域并决定每个子区域上的输出值,构建二叉决策树。
- 选择最优切分特征j切分点s(特征的值)[双层循环],使下式达到最小。 min j , s [ min c 1 ∑ x 1 ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + min c 2 ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] \min _{j, s}\left[\min _{c_{1}} \sum_{x_{1} \in R_{1}(j, s)}\left(y_{i}-c_{1}\right)^{2}+\min _{c_{2}} \sum_{x_{i} \in R_{2}(j, s)}\left(y_{i}-c_{2}\right)^{2}\right] j,smin⎣⎡c1minx1∈R1(j,s)∑(yi−c1)2+c2minxi∈R2(j,s)∑(yi−c2)2⎦⎤其中 c 1 = ave ( y i ∣ x i ∈ R 1 ( j , s ) ) , c 2 = ave ( y i ∣ x i ∈ R 2 ( j , s ) ) c 1=\operatorname{ave}\left(y_{i} \mid x_{i} \in R_{1}(j, s)\right), c_{2}=\operatorname{ave}\left(y_{i} \mid x_{i} \in R_{2}(j, s)\right) c1=ave(yi∣xi∈R1(j,s)),c2=ave(yi∣xi∈R2(j,s)),两个子区域为 R 1 R_{1} R1和 R 2 R_{2} R2。
- 用选定的(j,s)划分区域并确定输出。(输出为当前划分的子区域标签的均值)
- 重复1,2,直至满足停止条件。(在具体实现中,停止条件可以是区域不可以再分,或者 min j , s [ min c 1 ∑ x 1 ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + min c 2 ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] \min _{j, s}\left[\min _{c_{1}} \sum_{x_{1} \in R_{1}(j, s)}\left(y_{i}-c_{1}\right)^{2}+\min _{c_{2}} \sum_{x_{i} \in R_{2}(j, s)}\left(y_{i}-c_{2}\right)^{2}\right] minj,s[minc1∑x1∈R1(j,s)(yi−c1)2+minc2∑xi∈R2(j,s)(yi−c2)2]小于某个阈值),
- 将输入空间划分为M个路径,生成决策树: f ( x ) = ∑ m = 1 M c m I ( x ∈ R m ) f(x)=\sum_{m=1}^{M} c_{m} I\left(x \in R_{m}\right) f(x)=m=1∑McmI(x∈Rm)
课后习题有一道生成二叉回归树的题,答案请参照AmazingJadeWu的博客。
5.1.2分类树的生成
分类树用基尼指数选择最优特征,同时决定该特征的最优二值划分点。
定义(基尼指数):分类问题中,假设有
K
K
K个类,样本点属于第k类的概率为
p
k
p_{k}
pk,则概率分布的基尼指数定义为:
Gini
(
p
)
=
∑
k
=
1
K
p
k
(
1
−
p
k
)
=
1
−
∑
k
=
1
K
p
k
2
\operatorname{Gini}(p)=\sum_{k=1}^{K} p_{k}\left(1-p_{k}\right)=1-\sum_{k=1}^{K} p_{k}^{2}
Gini(p)=k=1∑Kpk(1−pk)=1−k=1∑Kpk2
对于二分类问题,若样本点属于第1个类的概率是p,则概率分布的基尼指数为(上式
K
=
2
K=2
K=2的特例)。
Gini
(
p
)
=
2
p
(
1
−
p
)
\operatorname{Gini}(p)=2 p(1-p)
Gini(p)=2p(1−p)
对于给定的样本集合D,其基尼指数为
Gini
(
D
)
=
1
−
∑
k
=
1
K
(
∣
C
k
∣
∣
D
∣
)
2
\operatorname{Gini}(D)=1-\sum_{k=1}^{K}\left(\frac{\left|C_{k}\right|}{|D|}\right)^{2}
Gini(D)=1−k=1∑K(∣D∣∣Ck∣)2这里,
C
k
C_{k}
Ck是
D
D
D中属于第
k
k
k类的样本子集,
K
K
K是类的个数。
如果样本集合D根据特征A是否取某一可能值a被分割为
D
1
D_{1}
D1和
D
1
D_{1}
D1两部分,即
D
1
=
{
(
x
,
y
)
∈
D
∣
A
(
x
)
=
a
}
,
D
2
=
D
−
D
1
D_{1}=\{(x, y) \in D \mid A(x)=a\}, \quad D_{2}=D-D_{1}
D1={(x,y)∈D∣A(x)=a},D2=D−D1则在特征A的条件下,集合
D
D
D的基尼指数定义为
Gini
(
D
,
A
)
=
∣
D
1
∣
∣
D
∣
Gini
(
D
1
)
+
∣
D
2
∣
∣
D
∣
Gini
(
D
2
)
\operatorname{Gini}(D, A)=\frac{\left|D_{1}\right|}{|D|} \operatorname{Gini}\left(D_{1}\right)+\frac{\left|D_{2}\right|}{|D|} \operatorname{Gini}\left(D_{2}\right)
Gini(D,A)=∣D∣∣D1∣Gini(D1)+∣D∣∣D2∣Gini(D2)基尼指数
G
i
n
i
(
D
)
Gini(D)
Gini(D)表示
D
D
D的不确定性,基尼指数
G
i
n
i
(
D
,
A
)
Gini(D, A)
Gini(D,A)表示经
A
=
a
A=a
A=a分割后集合
D
D
D的不确定性。基尼指数数值越大,样本集合的不确定性也就越大。这一点与熵相似。若集合只有一类,代入上式可以得到基尼指数为0。
CART生成算法:
- 计算现有特征对数据集和可能切分点的基尼指数
- 在所有可能的特征即所有可能的切分点中,选择基尼指数最小的特征和对应的切分点作为最优特征和最优切分点,根据最优特征和最优切分点,从现结点生成两个子结点。将训练数据分配到两个子结点中。
- 递归执行第一步和第二步,直到满足条件。
- 生成CART决策树
5.2CART剪枝
CART剪枝从“完全生长”的决策树的底端减去一些子树,使决策树规模变小,从而降低过拟合,对未知数据有更准确的预测。CART剪枝由两步组成:
- 对生成的决策树从底端不断剪枝,直到根结点,这样就获得了一个子树序列。[新的参数 α \alpha α找到的最优子树(计算包括训练数据拟合和复杂度的整体损失得出)对应一个新的子树序列]
- 通过交叉验证法在独立的验证集上对子树序列进行测试,平方误差或基尼指数最小的决策时被认为是最优的决策树。
6.总结
7.扩展问题
先来了解一下什么是集成学习,集成学习通过将多个弱学习器(比如决策树、分类回归树)进行结合,对结果进行投票,通常可以获得比单一学习器更优越的性能。
1.决策树ID3,C4. 5,CART的区别
(1)ID3使用信息增益选择最优特征,而C4. 5使用信息增益率,CART的分类树使用基尼指数。CART的回归树使用平方误差最小化准则。
(2)树的形状上来看,前两个是多叉树,而第三个是二叉树,所以结构较前两个简洁,适应连续属性值的情况。
2.掌握Bagging和Boosting
Bagging
Bagging是根据均匀概率分布从数据中重复抽样(有放回)的技术。一次抽取训练一个基学习器,最终通过投票法决定预测结果,Bagging通过降低基分类器的方差,改善了泛化误差。个体学习器之间不存在强依赖关系,同时生成的并行方法,主要代表有随机森林。
boosting:
① boosting是一个迭代的过程,用于自适应地改变训练样本的分布,使得基分类器聚焦在那些很难分的样本上。
② 原始的boosting算法是在算法开始的时候,为每个样本赋上一个权重值,初始的时候,每个样本都是同样的重要。在每一步的训练中,得到的模型,会给出每个数据点的估计对错,根据判断的对错,在每一步的训练之后,会增加分错样本的权重,减少分类正确的样本的权重,如果在后续的每一步训练中,如果继续被分错,那么就会被严重的关注,也就是获得了一个比较高的权重。经过N次迭代之后,将会得到N个简单的分类器(base learner),然后将他们组装起来(可以进行加权,或者进行投票),得到一个最终的模型。
boosting的个体学习器之间存在强依赖关系,串行生成的序列化方法,主要代表有Adaboost,GBDT, XgBoost。
3.掌握随机森林,XGBoost原理
随机森林是bagging中的一个扩展变种,在bagging的基础上,进一步在训练过程中引入随机属性选择。具体来说,bagging是随机选择样本,而随机森林在随机选择样本的基础上,从d个属性中随机选择k个属性。优点是简单、容易实现、计算开销小。
XGBoost在GBDT基础上进行改进,是属于boosting的一种。
4.随机森林,XGB,LGB的各自区别(面试常问)
随机森林是Bagging方法的一种运用,后两者用的是提升boosting方法。
5.GBDT和XGB的区别
- XGB是GBDT的升级版,加了剪枝,控制了模型的复杂程度。
- GBDT利用CART作为基分类器,XGB可以支持线性分类器。
- XGB借鉴了随机森林,进行列抽样(对特征进行抽样,减少过拟合也降低了计算)。
(待学习)
8.内容参考
1.李航-统计学习方法
2.统计学习方法课后习题
3.集成学习法之bagging方法和boosting方法
4.简述决策树,随机森林和XGBOOST之间的原理
5.机器学习-树模型理论(GDBT,xgboost,lightBoost,随机森林)