《百面机器学习》学习笔记:(三)经典算法(SVM,LR,决策树)

SVM

1. SVM 原理

SVM原理

2. 空间上线性可分的两类点,在SVM分类的超平面上的投影仍然是线性可分的吗?

结论:对于任意线性可分的两组点,它们在SVM分类的超平面上的投影都是线性不可分的。
分析与解答
由于SVM的分类超平面仅由支持向量决定,我们可以考虑一个只含支持向量SVM模型场景,使用反证法来证明。假设存在一个SVM分类超平面使所有支持向量在该超平面上的投影依然线性可分(绿色实线),如图所示。根据简单的初等几何知识不难发现,图中AB两点连线的中垂线所组成的超平面(绿色虚线)是相较于绿色实线超平面更优的解,这与之前假设绿色实线超平面为最优的解相矛盾。考虑最优解对应的绿色虚线,两组点经过投影后,并不是线性可分的。
在这里插入图片描述

3. 是否存在一组参数使SVM训练误差为0?

一个使用高斯核 K ( x , z ) = e − ∣ ∣ x − z ∣ ∣ 2 / γ 2 K(x,z)=e^{-||x-z||^2/\gamma^2} K(x,z)=exz2/γ2 训练的SVM中,试证明若给定训练集中不存在两个点在同一位置,则存在一组参数 α 1 , . . . , α m , b {α_1,...,α_m,b} α1,...,αm,b 以及参数γ使得该SVM的训练误差为0

分析与解答
根据SVM的原理,我们可以将SVM的预测公式可写为: f ( x ) = ∑ i = 0 n α i y i K ( x i , x ) + b f(x)=\sum_{i=0}^nα_iy_iK(x_i,x)+b f(x)=i=0nαiyiK(xi,x)+b由于不存在两个点在同一位置,因此对于任意的 i , j i,j i,j,有 ∣ ∣ x i − x j ∣ ∣ ≥ ϵ ||x_i-x_j|| \geq ϵ xixjϵ,对任意 i i i,固定 α i = 1 , b = 0 α_i=1,b=0 αi=1b=0,只保留参数 γ γ γ,则有 f ( x ) = ∑ i = 0 n α i y i K ( x i , x ) + b = ∑ i = 0 n y i K ( x i , x ) = ∑ i = 0 n y i e − ∣ ∣ x − x i ∣ ∣ 2 / γ 2 \begin{aligned} f(x) &amp; = \sum_{i=0}^nα_iy_iK(x_i,x)+b \\ &amp; = \sum_{i=0}^ny_iK(x_i,x) \\ &amp; = \sum_{i=0}^ny_ie^{-||x-x_i||^2/\gamma^2} \\ \end{aligned} f(x)=i=0nαiyiK(xi,x)+b=i=0nyiK(xi,x)=i=0nyiexxi2/γ2将任意 x j x_j xj 代入上式则有: f ( x j ) = ∑ i = 0 n y i e − ∣ ∣ x j − x i ∣ ∣ 2 / γ 2 f ( x j ) = ∑ i = 0 , i ≠ j n y i e − ∣ ∣ x j − x i ∣ ∣ 2 / γ 2 + y j e − ∣ ∣ x j − x j ∣ ∣ 2 / γ 2 f ( x j ) − y j = ∑ i = 0 , i ≠ j n y i e − ∣ ∣ x j − x i ∣ ∣ 2 / γ 2 ∣ ∣ f ( x j ) − y j ∣ ∣ ≤ ∑ i = 0 , i ≠ j n e − ∣ ∣ x j − x i ∣ ∣ 2 / γ 2 \begin{aligned} f(x_j) &amp; = \sum_{i=0}^ny_ie^{-||x_j-x_i||^2/\gamma^2} \\ f(x_j) &amp; = \sum_{i=0,i\neq j}^ny_ie^{-||x_j-x_i||^2/\gamma^2} +y_je^{-||x_j-x_j||^2/\gamma^2} \\ f(x_j)-y_j &amp; = \sum_{i=0,i\neq j}^ny_ie^{-||x_j-x_i||^2/\gamma^2} \\ ||f(x_j)-y_j|| &amp; \leq \sum_{i=0,i\neq j}^ne^{-||x_j-x_i||^2/\gamma^2} \\ \end{aligned} f(xj)f(xj)f(xj)yjf(xj)yj=i=0nyiexjxi2/γ2=i=0,i̸=jnyiexjxi2/γ2+yjexjxj2/γ2=i=0,i̸=jnyiexjxi2/γ2i=0,i̸=jnexjxi2/γ2由题意知: ∣ x i − x j ∣ ≥ ϵ |x_i-x_j| \geq ϵ xixjϵ,取 γ = ϵ / l o g m γ=ϵ/\sqrt{logm} γ=ϵ/logm ,即重写为: ∣ ∣ f ( x j ) − y j ∣ ∣ ≤ ∑ i = 0 , i ≠ j n e − ∣ ∣ x j − x i ∣ ∣ 2 / γ 2 ≤ ∑ i = 0 , i ≠ j n e − l o g m = m − 1 m &lt; 1 \begin{aligned} ||f(x_j)-y_j|| &amp; \leq \sum_{i=0,i\neq j}^ne^{-||x_j-x_i||^2/\gamma^2} \\ &amp; \leq \sum_{i=0,i\neq j}^ne^{-logm}=\frac{m-1}m&lt;1 \end{aligned} f(xj)yji=0,i̸=jnexjxi2/γ2i=0,i̸=jnelogm=mm1<1所以,对于任意 x j x_j xj,预测结果与样本真实标签 y j y_j yj 的距离小于1。注意到, y j ∈ 1 , − 1 y_j∈{1,−1} yj1,1,当训练样本为正例,即时,预测结果>0,样本被预测为正例;而当训练样本为负例,即时,预测结果<0,样本被预测为负例。因此所有样本的类别都被正确预测,训练误差为0。

4. 训练误差为0的SVM分类器一定存在吗?

虽然在上个问题中我们找到了一组参数 α 1 , . . . , α m , b {α_1,...,α_m,b} α1,...,αm,b 以及γ使得SVM的训练误差为0,但这组参数不一定是满足SVM条件的一个解。在实际训练一个不加入松弛变量的SVM模型时,是否能保证得到的SVM分类器满足训练误差为0呢?

分析与解答
本问旨在找到一组参数满足训练误差为0,且是SVM模型的一个解。考虑SVM模型中解的限制条件 y i f ( x i ) ≥ 1 y_if(x_i) \geq 1 yif(xi)1。我们已经得到了一组参数使得当 y i = 1 y_i=1 yi=1 时, f ( x i ) &gt; 0 f(x_i)&gt;0 f(xi)>0;而 y i = − 1 y_i=-1 yi=1 时, f ( x i ) &lt; 0 f(x_i)&lt;0 f(xi)<0。现在需要找到一组参数满足更强的条件,即 y i f ( x i ) ≥ 1 y_if(x_i) \geq 1 yif(xi)1

任然固定 b=0,预测公式为 : f ( x ) = ∑ i = 0 n α i y i K ( x i , x ) + b f(x)=\sum_{i=0}^nα_iy_iK(x_i,x)+b f(x)=i=0nαiyiK(xi,x)+b,将 y j f ( x j ) y_jf(x_j) yjf(xj) 展开,有: y j f ( x j ) = y j ∑ i = 0 n α i y i K ( x i , x ) = α j y j y j K ( x j , x j ) + ∑ i = 0 , i ≠ j n α i y i y j K ( x i , x j ) = α j K ( x j , x j ) + ∑ i = 0 , i ≠ j n α i y i y j K ( x i , x j ) = α j + ∑ i = 0 , i ≠ j n α i y i y j e − ∣ ∣ x i − x j ∣ ∣ 2 / γ 2 \begin{aligned} y_jf(x_j) &amp; = y_j\sum_{i=0}^nα_iy_iK(x_i,x) \\ &amp; = α_jy_jy_jK(x_j,x_j)+\sum_{i=0,i \neq j}^nα_iy_iy_jK(x_i,x_j) \\ &amp; = α_jK(x_j,x_j)+\sum_{i=0,i \neq j}^nα_iy_iy_jK(x_i,x_j) \\ &amp; = α_j+\sum_{i=0,i \neq j}^nα_iy_iy_je^{-||x_i-x_j||^2/\gamma^2} \\ \end{aligned} yjf(xj)=yji=0nαiyiK(xi,x)=αjyjyjK(xj,xj)+i=0,i̸=jnαiyiyjK(xi,xj)=αjK(xj,xj)+i=0,i̸=jnαiyiyjK(xi,xj)=αj+i=0,i̸=jnαiyiyjexixj2/γ2观察上式,可以把每个 α j α_j αj 都选择一个很大的值,同时取一个非常小的γ,使得核映射项非常小,于是 α j α_j αj 在上式中占据绝对主导地位。这样就保证对任意 j j j y j f ( x j ) &gt; 1 y_jf(x_j) &gt;1 yjf(xj)>1,满足SVM解的条件。因此SVM最优解也满足上述条件,同时一定使模型分类误差为0。

5. 加入松弛变量的SVM的训练误差可以为0吗?

在实际应用中,如果使用SMO算法来训练一个加入松弛变量的线性SVM模型,并且惩罚因子C为任一未知常数,我们是否能得到训练误差为0的模型呢?

分析与解答
使用SMO算法训练的线性分类器并不一定能得到训练误差为0的模型。这是由于我们的优化目标改变了,并不再是使训练误差最小。考虑带松弛变量的SVM模型优化的目标函数所包含的两项: C ∑ n ξ i C\sum^nξ_i Cnξi 1 2 ∣ ∣ w ∣ ∣ 2 \frac12||w||^2 21w2,当我们的参数C选取较小的值时,后一项(正则项)将占据优化的较大比重。这样,一个带有训练误差,但是参数较小的点将成为更优的结果。一个简单的特例是,当C取0时,w也取0即可达到优化目标,但是显然此时我们的训练误差不一定能达到0。

逻辑回归(Logistic Regression)

1. LR原理,逻辑回归相比于线性回归有何异同?

线性回归与逻辑回归

2. 当使用逻辑回归处理多标签的分类问题时,有哪些常见做法,分别应用于哪些场景,它们之间又有怎样的关系?

  1. 如果一个样本只对应于一个标签,我们可以假设每个样本属于不同标签的概率服从于几何分布,使用多项逻辑回归(Softmax Regression)来进行分类。
  2. 当存在样本可能属于多个标签的情况时,我们可以训练k个二分类的逻辑回归分类器。第i个分类器用以区分每个样本是否可以归为第i类,训练该分类器时,需要把标签重新整理为“第i类标签”与“非第i类标签”两类。通过这样的办法,我们就解决了每个样本可能拥有多个标签的情况。

3. 为什么要用sigmoid作为激活函数

决策树

参考https://www.cnblogs.com/pinard/p/6053344.html

1. 决策树

决策树是一种自上而下,对样本数据进行树形分类的过程,由结点和有向边组成。结点分为内部结点和叶结点,其中每个内部结点表示一个特征或属性,叶结点表示类别。从顶部根结点开始,所有样本聚在一起。经过根结点的划分,样本被分到不同的子结点中。再根据子结点的特征进一步划分,直至所有样本都被归到某一个类别(即叶结点)中。从决策树的根节点到叶节点的一条路径形成对该元组的类别预测。 一般而言,决策树的生成包含了特征选择、树的构造、树的剪枝三个过程,

2. 决策树有哪些常用的启发函数?

常用的决策树算法有ID3、C4.5、CART

2.1 ID3

对于样本集合D,类别数为K,数据集D的经验熵表示为:

在这里插入图片描述
其中 C k C_k Ck 是样本集合D中属于第k类的样本子集, ∣ C k ∣ |C_k| Ck 表示该子集的元素个数,|D|表示样本集合的元素个数。

然后计算某个特征A对于数据集D的经验条件熵 H ( D ∣ A ) H(D|A) H(DA) 为:
在这里插入图片描述
其中, D i D_i Di 表示D中特征A取第i个值的样本子集, D i k D_{ik} Dik 表示 D i D_i Di 中属于第k类的样本子集。
于是信息增益 g(D,A) 可以表示为二者之差,可得
在这里插入图片描述
选取具有最高信息增益的属性作为决策树节点的分裂属性,使得分类所需的信息最少

ID3算法具体过程:

  1. 初始化信息增益的阈值ϵ
  2. 判断样本是否为同一类输出 D i D_i Di,如果是则返回单节点树T。标记类别为 D i D_i Di
  3. 判断特征是否为空,如果是则返回单节点树T,标记类别为样本中输出类别D实例数最多的类别。
  4. 计算A中的各个特征(一共n个)对输出D的信息增益,选择信息增益最大的特征 A g A_g Ag
  5. 如果 A g A_g Ag的信息增益小于阈值ϵ,则返回单节点树T,标记类别为样本中输出类别D实例数最多的类别。
  6. 否则,按特征 A g A_g Ag的不同取值 A g i A_{gi} Agi将对应的样本输出D分成不同的类别 D i D_i Di。每个类别产生一个子节点。对应特征值为Agi。返回增加了节点的数T。
  7. 对于所有的子节点,令 D = D i , A = A − A g D=D_i,A=A−{A_g} D=Di,A=AAg 递归调用2-6步,得到子树Ti并返回。

ID3算法的不足:

  1. ID3没有考虑连续特征,比如长度,密度都是连续值,无法在ID3运用。这大大限制了ID3的用途。
  2. ID3采用信息增益大的特征优先建立决策树的节点。但在相同条件下,取值比较多的特征比取值少的特征信息增益大。比如一个变量有2个值,各为1/2,另一个变量为3个值,各为1/3,其实他们都是完全不确定的变量,但是取3个值的比取2个值的信息增益大。
  3. ID3算法对于缺失值的情况没有做考虑
  4. 没有考虑过拟合的问题

2.2 C4.5

C4.5算法中对上述问题进行了改进。
连续属性值
确定最佳分裂点(将连续的特征离散化):根据属性A将D中数据排序。典型地,每对相邻值的中间值作为可能的分裂点,这样属性A给定的v个值,则有v-1个可能的分裂,对每个分裂点计算期望信息量,其中划分的子集个数为2(大于或小于),最终选择分裂点中使得期望信息量最大的点。

信息增益比:解决信息增益作为标准容易偏向于取值较多的特征的问题
特征A对于数据集D的信息增益比定义为:
在这里插入图片描述
其中:
在这里插入图片描述
称为数据集D关于A的取值熵,选择具有最大增益率的属性作为分裂属性,倾向于不平衡数据

缺失值处理:主要需要解决的是两个问题,一是在样本某些特征缺失的情况下选择划分的属性,二是选定了划分属性,对于在该属性上缺失特征的样本的处理。

  1. 对于某一个有缺失特征值的特征A。C4.5的思路是将数据分成两部分,对每个样本设置一个权重(初始可以都为1),然后划分数据,一部分是有特征值A的数据D1,另一部分是没有特征A的数据D2. 然后对于没有缺失特征A的数据集D1来和对应的A特征的各个特征值一起计算加权重后的信息增益比,最后乘上一个系数,这个系数是无特征A缺失的样本加权后所占加权总样本的比例。
  2. 将缺失特征的样本同时划分入所有的子节点,不过将该样本的权重按各个子节点样本的数量比例来分配。比如缺失特征A的样本a之前权重为1,特征A有3个特征值A1,A2,A3。 3个特征值对应的无缺失A特征的样本个数为2,3,4.则a同时划分入A1,A2,A3。对应权重调节为2/9,3/9, 4/9。

C4.5算法的不足:

  1. C4.5生成的是多叉树,即一个父节点可以有多个节点。很多时候,在计算机中二叉树模型会比多叉树运算效率高。如果采用二叉树,可以提高效率。
  2. C4.5只能用于分类,如果能将决策树用于回归的话可以扩大它的使用范围。
  3. C4.5由于使用了熵模型,里面有大量的耗时的对数运算,如果是连续值还有大量的排序运算。
  4. 容易过拟合

2.3 CART

CART分类树算法使用基尼系数来代替信息增益比,基尼系数代表了模型的不纯度,基尼系数越小,则不纯度越低,特征越好。这和信息增益(比)是相反的。
最大基尼指数(Gini):描述数据划分的纯度,与信息熵含义类似。

在这里插入图片描述
CART在每一次迭代中选择基尼指数最小的特征及其对应的切分点进行分类。但与ID3、C4.5不同的是,CART是一颗二叉树,采用二元切割法,每一步将数据按特征A的取值切成两份,分别进入左右子树。特征A的Gini指数定义为:
在这里插入图片描述

CART回归树建立算法

CART回归树和CART分类树的建立算法大部分是类似的,所以这里我们只讨论CART回归树和CART分类树的建立算法不同的地方。除了下面提到了以外,CART回归树和CART分类树的建立算法和预测没有什么区别。

  1. 连续值的处理方法不同对于连续值的处理,我们知道CART分类树采用的是用基尼系数的大小来度量特征的各个划分点的优劣情况。这比较适合分类模型,但是对于回归模型,我们使用了常见的和方差的度量方式,CART回归树的度量目标是,对于任意划分特征A,对应的任意划分点s两边划分成的数据集D1和D2,求出使D1和D2各自集合的均方差最小,同时D1和D2的均方差之和最小所对应的特征和特征值划分点。表达式为:
  2. 决策树建立后做预测的方式不同。上面讲到了CART分类树采用叶子节点里概率最大的类别作为当前节点的预测类别。而回归树输出不是类别,它采用的是用最终叶子的均值或者中位数来预测输出结果。
CART树算法的剪枝

由于决策时算法很容易对训练集过拟合,而导致泛化能力差,为了解决这个问题,我们需要对CART树进行剪枝,即类似于线性回归的正则化,来增加决策树的泛化能力。但是,有很多的剪枝方法,我们应该这么选择呢?CART采用的办法是后剪枝法,即先生成决策树,然后产生所有可能的剪枝后的CART树,然后使用交叉验证来检验各种剪枝的效果,选择泛化能力最好的剪枝策略。

CART树的剪枝算法可以概括为两步,第一步是从原始决策树生成各种剪枝效果的决策树,第二部是用交叉验证来检验剪枝后的预测能力,选择泛化预测能力最好的剪枝后的数作为最终的CART树。

首先我们看看剪枝的损失函数度量,在剪枝的过程中,对于任意的一刻子树T,其损失函数为(见3.1节): C α ( T t ) = C ( T t ) + α ∣ T t ∣ C_α(T_t)=C(T_t)+α|T_t| Cα(Tt)=C(Tt)+αTt其中,α为正则化参数,这和线性回归的正则化一样。 C ( T t ) C(T_t) C(Tt)为训练数据的预测误差,分类树是用基尼系数度量,回归树是均方差度量。 ∣ T t ∣ |T_t| Tt 是子树T的叶子节点的数量。

看过剪枝的损失函数度量后,我们再来看看剪枝的思路,对于位于节点t的任意一颗子树Tt,如果没有剪枝,它的损失是 C α ( T t ) = C ( T t ) + α ∣ T t ∣ C_α(T_t)=C(T_t)+α|T_t| Cα(Tt)=C(Tt)+αTt如果将其剪掉,仅仅保留根节点,则损失是 C α ( T ) = C ( T ) + α C_α(T)=C(T)+α Cα(T)=C(T)+α当α=0或者α很小时, C α ( T t ) &lt; C α ( T ) C_α(T_t)&lt;C_α(T) Cα(Tt)<Cα(T) , 当α增大到一定的程度时 C α ( T t ) = C α ( T ) C_α(T_t)=C_α(T) Cα(Tt)=Cα(T)。当α继续增大时不等式反向,也就是说,如果满足下式: α = C ( T ) − C ( T t ) ∣ T t ∣ − 1 α=\frac{C(T)−C(T_t)}{|T_t|−1} α=Tt1C(T)C(Tt) T t T_t Tt和T有相同的损失函数,但是T节点更少,因此可以对子树 T t T_t Tt进行剪枝,也就是将它的子节点全部剪掉,变为一个叶子节点T。

最后我们看看CART树的交叉验证策略。上面我们讲到,可以计算出每个子树是否剪枝的阈值α,如果我们把所有的节点是否剪枝的值α都计算出来,然后分别针对不同的α所对应的剪枝后的最优子树做交叉验证。这样就可以选择一个最好的α,有了这个α,我们就可以用对应的最优子树作为最终结果。

CART剪枝算法过程如下:
输入是CART树建立算法得到的原始决策树T,输出是最优决策子树Tα。

  1. 初始化 α m i n = ∞ α_{min}=∞ αmin=, 最优子树集合 ω = T ω={T} ω=T
  2. 从叶子节点开始自下而上计算各内部节点t的训练误差损失函数 C α ( T t ) C_α(T_t) Cα(Tt)(回归树为均方差,分类树为基尼系数), 叶子节点数 ∣ T t ∣ |T_t| Tt,以及正则化阈值 α = m i n { C ( T ) − C ( T t ) ∣ T t ∣ − 1 , α m i n } α=min\{\frac{C(T)−C(T_t)}{|T_t|−1},α_{min}\} α=min{Tt1C(T)C(Tt),αmin}, 更新 α m i n = α α_{min}=α αmin=α
  3. 得到所有节点的 α 值的集合M。
  4. 从M中选择最大的值 α k α_k αk,自上而下的访问子树t的内部节点,如果 C ( T ) − C ( T t ) ∣ T t ∣ − 1 ≤ α k \frac{C(T)−C(T_t)}{|T_t|−1}≤α_k Tt1C(T)C(Tt)αk时,进行剪枝。并决定叶节点t的值。如果是分类树,则是概率最高的类别,如果是回归树,则是所有样本输出的均值。这样得到 α k α_k αk 对应的最优子树 T k T_k Tk
  5. 最优子树集合 ω = ω ∪ T k , M = M − α k ω=ω∪T_k, M=M−{α_k} ω=ωTkM=Mαk
  6. 如果M不为空,则回到步骤4。否则就已经得到了所有的可选最优子树集合ω.
  7. 采用交叉验证在ω选择最优子树 T α T_α Tα

2.4 三种方法的对比

在这里插入图片描述

  1. 首先,ID3是采用信息增益作为评价标准,会倾向于取值较多的特征。因为,信息增益反映的是给定条件以后不确定性减少的程度,特征取值越多就意味着确定性更高,也就是条件熵越小,信息增益越大。
    C4.5实际上是对ID3进行优化,通过引入信息增益比,一定程度上对取值比较多的特征进行惩罚,避免ID3出现过拟合的特性,提升决策树的泛化能力。
  2. 其次,从样本类型的角度,ID3只能处理离散型变量,而C4.5和CART都可以处理连续型变量。C4.5处理连续型变量时,通过对数据排序之后找到类别不同的分割线作为切分点,根据切分点把连续属性转换为布尔型,从而将连续型变量转换多个取值区间的离散型变量。而对于CART,由于其构建时每次都会对特征进行二值划分,因此可以很好地适用于连续性变量。
  3. 从应用角度,ID3和C4.5只能用于分类任务,而CART(Classification and Regression Tree,分类回归树)从名字就可以看出其不仅可以用于分类,也可以应用于回归任务(回归树使用最小平方误差准则)。
  4. ID3对样本特征缺失值比较敏感,而C4.5和CART可以对缺失值进行不同方式的处理
  5. ID3和C4.5可以在每个结点上产生出多叉分支,且每个特征在层级之间不会复用,而CART每个结点只会产生两个分支,因此最后会形成一颗二叉树,且每个特征可以被重复使用;
  6. ID3和C4.5通过剪枝来权衡树的准确性与泛化能力,而CART直接利用全部数据发现所有可能的树结构进行对比。

3. 如何对决策树进行剪枝?

一棵完全生长的决策树会面临一个很严重的问题,即过拟合。假设我们需要考虑DNA特征,由于每个人的DNA都不同,完全生长的决策树所对应的每个叶结点中只会包含一个样本,这就导致决策树是过拟合的。用它进行预测时,在测试集上的效果将会很差。因此我们需要对决策树进行剪枝,剪掉一些枝叶,提升模型的泛化能力。

决策树的剪枝通常有两种方法,预剪枝(Pre-Pruning)后剪枝(Post-Pruning)预剪枝,即在生成决策树的过程中提前停止树的增长。而后剪枝,是在已生成的过拟合决策树上进行剪枝,得到简化版的剪枝决策树。

3.1 决策树的损失函数

参考:https://blog.csdn.net/am290333566/article/details/81187562#31__185
决策树可以看作是一系列 if-then 规则的集合。这个规则集合有一个重要的性质:互斥并且完备。意思就是说,拿来任意一个实例,顺着规则的起点(根结点)出发,最终都有且只有一条路径到达某一个具体的叶结点(具体的分类),并且不会出现实例无法分类的情况。

如果不考虑泛化能力,在训练集上生成的所有不同规则集合对应的决策树中,挑选出最优的决策树,可以根据所有叶结点中的预测误差来衡量,即模型与训练数据的拟合程度。设树 T T T 的叶结点个数为 ∣ T ∣ ∣T∣ T t t t 是树 T T T 的一个叶结点,该叶结点有 N t N_t Nt 个样本点,其中 k k k 类的样本点有 N t k N_{tk} Ntk 个, k = 1 , 2 , . . . , K k=1,2,...,K k=1,2,...,K K K K 为样本空间中的所属分类数量。叶结点 t t t 上的经验熵 H t ( T ) Ht(T) Ht(T) H t ( T ) = − ∑ k N t k N t log ⁡ N t k N t H_t(T)=−∑_k\frac{N_{tk}}{N_t}\log\frac{N_{tk}}{N_t} Ht(T)=kNtNtklogNtNtk代表了该叶结点的分类还有多少信息量不知道(混乱程度),可以这么考虑一个理想的极端情况,当该叶结点中只有一个分类 k n k_n kn 时,那么 N t k n = N t N_{tk_n}=N_t Ntkn=Nt,其它的 N k 1 , . . . , N k n − 1 , N k n + 1 , . . . , N k K N_{k_1},...,N_{k_{n-1}},N_{k_{n+1}},...,N_{k_K} Nk1,...,Nkn1,Nkn+1,...,NkK 全部为 0,最终 H t ( T ) = 0 H_t(T)=0 Ht(T)=0,这个结论与分类已经完全的结果是相吻合的。那么我们可以说,经验熵 H t ( T ) H_t(T) Ht(T) 就代表了连接该叶结点的整个路径对数据分类的彻底性。

考虑到所有的叶结点每个叶结点中的样例个数不同,我们采用 C ( T ) = ∑ t = 1 ∣ T ∣ N t H t ( T ) = − ∑ t = 1 ∣ T ∣ ∑ k = 1 K N t k log ⁡ N t k N t C(T)=\sum_{t=1}^{|T|}N_tH_t(T)=-\sum_{t=1}^{|T|}\sum_{k=1}^K N_{tk}\log\frac{N_{tk}}{N_t} C(T)=t=1TNtHt(T)=t=1Tk=1KNtklogNtNtk
来衡量模型对训练数据的整体测量误差

但是如果仅仅用 C(T) 来作为优化目标函数,就会导致模型走向过拟合的结果。因为我们可以尽可能的对每一个分支划分到最细结来使得每一个叶结点的 H t ( T ) = 0 H_t(T)=0 Ht(T)=0,最终使得 C ( T ) = 0 C(T)=0 C(T)=0 最小。

为了避免过拟合,我们需要给优化目标函数增加一个正则项,正则项应该包含模型的复杂度信息。对于决策树来说,其叶结点的数量 ∣T∣越多就越复杂,我们用添加正则项的 C α ( T ) = C ( T ) + α ∣ T ∣ C_α(T)=C(T)+α∣T∣ Cα(T)=C(T)+αT来作为优化的目标函数,也就是树的损失函数。

当α=0时,即没有正则化,原始的生成的CART树即为最优子树。当α=∞时,即正则化强度达到最大,此时由原始的生成的CART树的根节点组成的单节点树为最优子树。当然,这是两种极端情况。一般来说,α越大,则剪枝剪的越厉害,生成的最优子树相比原生决策树就越偏小。对于固定的α,一定存在使损失函数 C α ( T ) C_α(T) Cα(T) 最小的唯一子树。

决策树的生成过程并不是一个准确的求解树的损失函数的最优化方法。三种决策树学习方法都是一种启发式的求解步骤,在每一步扩大树的规模的时候都是找当前步能使分类结果提升最明显的选择。为了提高决策树的泛化能力,需要对树进行 剪枝 (Pruning),把过于细分的叶结点(通常是数据量过少导致噪声数据的影响增加)去掉而回退到其父结点或更高的结点,使其父结点或更高的结点变为叶结点。

3.2 预剪枝

预剪枝的核心思想是在树中结点进行扩展之前,先计算当前的划分是否能带来模型泛化能力的提升,如果不能,则不再继续生长子树。此时可能存在不同类别的样本同时存于结点中,按照多数投票的原则判断该结点所属类别。

预剪枝对于何时停止决策树的生长有以下几种方法
(1)当树到达一定深度的时候,停止树的生长。
(2)当到达当前结点的样本数量小于某个阈值的时候,停止树的生长。
(3)计算每次分裂对测试集的准确度提升,当小于某个阈值的时候,不再继续扩展。

优点:预剪枝具有思想直接、算法简单、效率高等特点,适合解决大规模问题。
缺点:如何准确地估计何时停止树的生长(即上述方法中的深度或阈值),针对不同问题会有很大差别,需要一定经验判断。且预剪枝存在一定局限性,有欠拟合的风险,虽然当前的划分会导致测试集准确率降低,但在之后的划分中,准确率可能会有显著上升。

3.2 后剪枝

后剪枝的核心思想是让算法生成一棵完全生长的决策树,然后从最底层向上计算是否剪枝。剪枝过程将子树删除,用一个叶子结点替代,该结点的类别同样按照多数投票的原则进行判断。同样地,**后剪枝也可以通过在测试集上的准确率进行判断,如果剪枝过后准确率有所提升,则进行剪枝。**相比于预剪枝,后剪枝方法通常可以得到泛化能力更强的决策树,但时间开销会更大。

常见的后剪枝方法包括错误率降低剪枝(Reduced Error Pruning,REP)、悲观剪枝(Pessimistic Error Pruning,PEP)、代价复杂度剪枝(Cost Complexity Pruning,CCP)、最小误差剪枝(Minimum Error Pruning,MEP)、CVP(Critical Value Pruning)、OPP(Optimal Pruning)等方法,这些剪枝方法各有利弊,关注不同的优化角度。

剪枝方法参考决策树剪枝算法

4 决策树算法小结

优点

1)简单直观,生成的决策树很直观。
2)基本不需要预处理,不需要提前归一化,处理缺失值。
3)使用决策树预测的代价是O(log2m)。 m为样本数。
4)既可以处理离散值也可以处理连续值。很多算法只是专注于离散值或者连续值。
5)可以处理多维度输出的分类问题。
6)相比于神经网络之类的黑盒分类模型,决策树在逻辑上可以得到很好的解释
7)可以交叉验证的剪枝来选择模型,从而提高泛化能力。
8) 对于异常点的容错能力好,健壮性高。

缺点

1)决策树算法非常容易过拟合,导致泛化能力不强。可以通过设置节点最少样本数量和限制决策树深度来改进。
2)决策树会因为样本发生一点点的改动,就会导致树结构的剧烈改变。这个可以通过集成学习之类的方法解决。
3)寻找最优的决策树是一个NP难的问题,我们一般是通过启发式方法,容易陷入局部最优。可以通过集成学习之类的方法来改善。
4)有些比较复杂的关系,决策树很难学习,比如异或。这个就没有办法了,一般这种关系可以换神经网络分类方法来解决。
5)如果某些特征的样本比例过大,生成决策树容易偏向于这些特征。这个可以通过调节样本权重来改善。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值