百面机器学习03-经典算法

01 支持向量机

支持向量机 (Support Vector Machine, SVM)是众多监督学习万法中十分出色的一种,几乎所有讲述经典机器学习万洼的教材都会介绍 。 关于 SVM,流传着一个关于天使与魔鬼的故事 。

传说魔鬼和天使玩了一个游戏 , 魔鬼在桌上放了两种颜色的球,如图 3.1 所示 。 魔鬼让天使用一根木棍将它们分开 。 这对天使来说,似乎太容易了 。 天使不假思索地一摆,便完成了任务 2 如图 3.2 所示。魔鬼又加入了更多的球 。 随着球的增多,似乎奇的球不能再被原来的木棍正确分开 , 如图 3.3 所示 。
在这里插入图片描述
SVM 实际上是在为天使找到木棒的最佳放置位置 , 使得两边的球都离分隔它们的木棒足够远 3 如图 3.4 所示 。 依照 SVM 为天使选择的木棒位置,魔鬼即使按刚才的方式继续加入新球 ,木棒也能很好地将两类不同的球分开,如图 3. 5 所示
在这里插入图片描述
看到天使已经很好地解决了用木棒线性分球的问题, 魔鬼又给了天使一个新的挑战,如图 3.6 所示 。 按照这种球的摆法,世界上貌似没有一根木棒可以将它们完美分开 。 但天使毕竟有法力, 他一拍桌子 ,便让这些球飞到了空中,然后凭借念力抓起一张纸片,插在了两类球的中间,如图 3.7 所示 。 从魔鬼的角度看这些球,则像是被一条曲线完美的切开了,如图 3 . 8 所示
在这里插入图片描述
后来’ “无聊”的科学家们把这些球称为“数据”,把木棍称为“分类面",找到最大间隔的木棒位置的过程称为 “优化”,拍桌子让球飞到空中的念力叫“核映射”,在空中分隔球的纸片称为“分类超平面’’ 。这便是 SVM 的童话故事。

在现实世界的机器学习领域, SVM 涵盖了各个方面的知识,也是面试题目中常见的基础模型 。 本节的第 1 个问题考察 SVM 模型推导的基础知识;第 2 题~第 4 题则会侧重对核函数( Kernel Function )的理解。

知识点:SVM 模型推导,核函数 , SMO (Sequential Minimal Optimization )算法

问题1:在空阅上线性可分的两类点,分别向 SVM 分类的超平面上做投影,这些点在超平面上的投影仍然是线性可分的吗?

首先明确下题目中的概念,线性可分的两类点,即通过一个超平面可以将两类点完全分开 , 如图 3 . 9 所示。假设绿色的超平面(对于二维空间来说,分类超平面退化为一维直线):为 SVM 算法计算得出的分类面,那么两类点就被完全分开 。 我们想探讨的是:将这两类点向绿色平上做投影,在分类直线上得到的黄棕两类投影点是否仍然线性可分 ,
如图 3.10所示
在这里插入图片描述
显然一眼望去,这些点在台类超平面(绿色直线)上相互间隔,并不是线性可分的 。 考虑一个更简单的反例,设想、三维空间中只有两个样本点,每个点各属于一类的分类任务,此时 SVM 的分类超平面(直线)就是两个样本点连线的中垂线,两个点在台类面(直线)上的投影会落到这条直线上的同一个点,自然不是线性可分的。

但实际上,对于任意线性可分的两组点,它们在 SVM 分类的超平面上的投影都是线性不可分的 。 这听上去有些不可思议,我们不妨从二维情况进行讨论,再推广到高维空间中。

由于 SVM 的分类超平面仅由支持向量决定(之后会证明这结论),我们可以考虑一个只含支持向量 SVM 模型场景 。 使用反证法来证明 。 假设存在一个 SVM 分类超平面使所有支持向量在该超平面上的投影依然线性可分,如图 3.11 所示 。 根据简单的初等几何知识不难发现,图中 AB两点连线的中垂线所组成的超平面(绿色虚线);是相较于绿色实线超平面更优的解,这与之前假设绿色实线超平面为最优的解相矛盾 。 考虑最优解对应的绿色虚线。两组点经过投影后,并不是线性可分的。
在这里插入图片描述
我们的证明目前还有不严谨之处,即我们假设了仅有支持向量的情况,会不会在超平面的变换过程中支持向量发生了改变,原先的非支持向量和支持向量发生了转化呢? 下面我们证明 SVM 的分类结果仅依赖于支持向量。考虑 SVM 推导中的 KKT 条件要求
∇ ω L ( ω ∗ , β ∗ , α ∗ ) = ω ∗ − ∑ i = 1 N α i ∗ y i x i = 0 ∇ β L ( ω ∗ , β ∗ , α ∗ ) = − ∑ i = 1 N α i ∗ y i = 0 α i ∗ g i ( ω ∗ ) = 0 , i = 1 , … , N g i ( ω ∗ ) ⩽ 0 , i = 1 , … , N α i ∗ ⩾ 0 , i = 1 , … , N \begin{array}{c} \nabla_{\omega} L\left(\omega^{*}, \beta^{*}, \alpha^{*}\right)=\omega^{*}-\sum_{i=1}^{N} \alpha_{i}^{*} y_{i} x_{i}=0 \\ \nabla_{\beta} L\left(\omega^{*}, \beta^{*}, \alpha^{*}\right)=-\sum_{i=1}^{N} \alpha_{i}^{*} y_{i}=0 \\ \alpha_{i}^{*} g_{i}\left(\omega^{*}\right)=0, \quad i=1, \ldots, N \\ g_{i}\left(\omega^{*}\right) \leqslant 0, i=1, \ldots, N \\ \alpha_{i}^{*} \geqslant 0, \quad i=1, \ldots, N \end{array} ωL(ω,β,α)=ωi=1Nαiyixi=0βL(ω,β,α)=i=1Nαiyi=0αigi(ω)=0,i=1,,Ngi(ω)0,i=1,,Nαi0,i=1,,N
结合式 (3.3) 和式 (3.4) 两个条件不难发现,当 g i ( ω ∗ ) < 0 g_{i}\left(\omega^{*}\right)<0 gi(ω)<0 , , ,必有 α i ∗ = 0 , \alpha_{i}^{*}=0, αi=0, 将这一结果与拉格朗日对偶优化问题的公式相比较
L ( ω ∗ , α ∗ , β ∗ ) = 1 2 ω ∗ 2 + ∑ i = 1 N α i ∗ g i ( ω ∗ ) L\left(\omega^{*}, \alpha^{*}, \beta^{*}\right)=\frac{1}{2} \omega^{* 2}+\sum_{i=1}^{N} \alpha_{i}^{*} g_{i}\left(\omega^{*}\right) L(ω,α,β)=21ω2+i=1Nαigi(ω)
其中,
g i ( ω ∗ ) = − y i ( ω ∗ ⋅ x i + β ∗ ) + 1 g_{i}\left(\omega^{*}\right)=-y_{i}\left(\omega^{*} \cdot x_{i}+\beta^{*}\right)+1 gi(ω)=yi(ωxi+β)+1
可以看到,除支持向量外,其他系数均为 0 , 0, 0, 因此 SVM 的分类结果与仅使用支持向量的分大结果一致,说明 SVM 的分类结果仅依赖于支持向量,这也是 SVM 拥有极高运行效率的关键之一。于是,我们证明了对于任意线性可分的两组点,它们在 SVM 分类的超平面上的投影都是线性不可分的。

实际上,该问题也可以通过凸优化理论中的超平面分离定理( Separating Hyperplane Theorem, SHT ) 更加轻巧地解决。该定理描述的是,对于不相交的两个凸集,存在一个超平面,将两个凸集分离。对于二维的情况,两个凸集间距离最短两点连线的中垂线就是一个将它们分离的超平面。

借助这个定理,我们可以先对线性可分的这两组点求各自的凸包。不难发现,SVM 求得的超平面就是两个凸包上距离最短的两点连线的中垂线,也就是 SHT 定理二维情况中所阐释的分类超平面。根据凸包的性质容易知道,凸包上的点要么是样本点,要么处于两个样本点的连线上。因此,两个凸包间距离最短的两个点可以分为三种情况:两边的点均为样本点,如图 3.12 ( a ) 所示; 两边的点均在样本点的连线上,如图 3.12 ( b ) 3.12(\mathrm{b}) 3.12(b) 所示; 一边的点为样本点, 另一边的点在样本点的连线上,如图 3.12 ( c \mathrm{c} c ) 所示。从几何上分析即可知道,无论哪种情况两类点的投影均是线性不可分的。

在这里插入图片描述

至此,我们从 SVM 直观推导和凸优化理论两个角度揭示了题目的真相。其实,在机器学习中还有很多这样看上去显而易见,细究起来却不可思议的结论。

问题2:是否存一组参数使 SVM 训练误差为0?

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

分析与解答
根据 SVM 的原理,我们可以将 SVM 的预测公式可写为 f ( x ) = ∑ i = 1 m α i y ( i ) K ( x ( i ) , x ) + b f(x)=\sum_{i=1}^{m} \alpha_{i} y^{(i)} K\left(x^{(i)}, x\right)+b f(x)=i=1mαiy(i)K(x(i),x)+b
其中 { ( x ( 1 ) , y ( 1 ) ) , … , ( x ( m ) , y ( m ) ) } \left\{\left(x^{(1)}, y^{(1)}\right), \ldots,\left(x^{(m)}, y^{(m)}\right)\right\} {(x(1),y(1)),,(x(m),y(m))} 为训练样本,而 { α 1 , … , α m , b } \left\{\alpha_{1}, \ldots, \alpha_{m}, b\right\} {α1,,αm,b} 以及高斯核参数 γ \gamma γ 为训练样本的参数。由于不存在两个点在同一位置,因此对于任意的 i ≠ j , i \neq j, i=j, ∥ x ( n ) − x ( j ) ∥ ⩾ ε ∘ \left\|x^{(n)}-x^{(j)}\right\| \geqslant \varepsilon_{\circ} x(n)x(j)ε 我们可以对任意 i , i, i, 固定 α i = 1 \alpha_{i}=1 αi=1 以及 b = 0 , b=0, b=0, 只保留参数 γ , \gamma, γ, 则有 f ( x ) = ∑ i = 1 m α i y ( i ) K ( x ( i ) , x ) + b = ∑ i = 1 m y ( i ) K ( x ( i ) , x ) = ∑ i = 1 m y ( i ) e − ∥ x − x ( i ) r 2 / γ 2 \begin{aligned} f(x) &=\sum_{i=1}^{m} \alpha_{i} y^{(i)} K\left(x^{(i)}, x\right)+b \\ &=\sum_{i=1}^{m} y^{(i)} K\left(x^{(i)}, x\right) \\ &=\sum_{i=1}^{m} y^{(i)} \mathrm{e}^{-\| x-x^{(i)} \mathrm{r}^{2} / \gamma^{2}} \end{aligned} f(x)=i=1mαiy(i)K(x(i),x)+b=i=1my(i)K(x(i),x)=i=1my(i)exx(i)r2/γ2
将任意 x ( i ) x^{(i)} x(i) 代入式 (3.9)
f ( x ( j ) ) = ∑ i = 1 m y ( i ) e − ∥ x ( j ) − x ( i ) ∥ 2 / γ 2 f\left(x^{(j)}\right)=\sum_{i=1}^{m} y^{(i)} \mathrm{e}^{-\left\|x^{(j)}-x^{(i)}\right\|^{2} / \gamma^{2}} f(x(j))=i=1my(i)ex(j)x(i)2/γ2
f ( x ( j ) ) − y ( j ) = ∑ i = 1 , i ≠ j m y ( i ) e − ∥ x ( j ) − x ( i ) ∥ 2 / γ 2 f\left(x^{(j)}\right)-y^{(j)}=\sum_{i=1, i \neq j}^{m} y^{(i)} \mathrm{e}^{-\left\|x^{(j)}-x^{(i)}\right\|^{2} / \gamma^{2}} f(x(j))y(j)=i=1,i=jmy(i)ex(j)x(i)2/γ2
∥ f ( x ( j ) ) − y ( j ) ∥ ⩽ ∑ i = 1 , i ≠ j m e − ∥ x ( j ) − x ( i ) ∥ 2 / γ 2 \left\|f\left(x^{(j)}\right)-y^{(j)}\right\| \leqslant \sum_{i=1, i \neq j}^{m} \mathrm{e}^{-\left\|x^{(j)}-x^{(i)}\right\|^{2} / \gamma^{2}} f(x(j))y(j)i=1,i=jmex(j)x(i)2/γ2

则有由题意知 ∥ x ( i ) − x ( j ) ∥ ⩾ ε , \left\|x^{(i)}-x^{(j)}\right\| \geqslant \varepsilon, x(i)x(j)ε, γ = ε / log ⁡ m , \gamma=\varepsilon / \sqrt{\log m}, γ=ε/logm , 可将式 (3.12) 重
写为
∥ f ( x ( j ) ) − y ( j ) ∥ ⩽ ∥ ∑ i = 1 , i ∗ j m e − ∥ x ( j ) − x ( i ) ∥ 2 / y 2 ∥ ⩽ ∥ ∑ i = 1 , i ∗ j m e − log ⁡ m ∥ = m − 1 m < 1 \begin{aligned} \left\|f\left(x^{(j)}\right)-y^{(j)}\right\| & \leqslant\left\|\sum_{i=1, i * j}^{m} \mathrm{e}^{-\left\|x^{(j)}-x^{(i)}\right\|^{2} / y^{2}}\right\| \\ & \leqslant\left\|\sum_{i=1, i * j}^{m} \mathrm{e}^{-\log m}\right\|=\frac{m-1}{m}<1 \end{aligned} f(x(j))y(j)i=1,ijmex(j)x(i)2/y2i=1,ijmelogm=mm1<1
所以,对于任意 x ( j ) , x^{(j)}, x(j), 预测结果 f ( x ( j ) ) f\left(x^{(j)}\right) f(x(j)) 与样本真实标签 y ( j ) y^{(j)} y(j) 的距离小于 1 。注意到, y ( j ) ∈ { 1 , − 1 } , y^{(j)} \in\{1,-1\}, y(j){1,1}, 当训练样本为正例,即 y ( j ) = 1 y^{(j)}=1 y(j)=1 时,预测结果 f ( x ( j ) ) > 0 , f\left(x^{(j)}\right)>0, f(x(j))>0, 样本被预测为正例; 而当训练样本为负例,即 y ( j ) = − 1 y^{(j)}=-1 y(j)=1 时,预测结果 f ( x ( j ) ) < 0 , f\left(x^{(j)}\right)<0, f(x(j))<0, 样本被预测为负例。因此所有样本的类别都被正确预测,训练误差为 0 。

问题3:训练误差为 0 的 SVM 分类器一定存在吗?

虽然在问题 2 中我们找到了一组参数 { α 1 , … , α m , b } \left\{\alpha_{1}, \ldots, \alpha_{m}, b\right\} {α1,,αm,b} 以及 γ \gamma γ 使得SVM 的训练误差为 0 , 0, 0, 但这组参数不一定是满足 SVM 条件的一个解。

在实际训一个不加入松弛变量的 SVM 模型时,是否能保证得到的SVM 分类器满足训练误差为 0 呢?

问题 2 找到了一组参数使得 SVM 分类器的训练误差为 0 。本问旨在找到一组参数满足训练误差为 0 , 0, 0, 且是 SVM 模型的一个解。

考虑 SVM 模型中解的限制条件 y ( j ) f ( x ( j ) ) ⩾ 1 y^{(j)} f\left(x^{(j)}\right) \geqslant 1 y(j)f(x(j))1 。我们已经得到了
一组参数使得当 y ( j ) = 1 y^{(j)}=1 y(j)=1 , f ( x ( j ) ) > 0 ; , f\left(x^{(j)}\right)>0 ; ,f(x(j))>0; 而当 y ( j ) = − 1 y^{(j)}=-1 y(j)=1 , f ( x ( j ) ) < 0 , ,f\left(x^{(j)}\right)<0, ,f(x(j))<0,因此 y ( j ) ⋅ f ( x ( j ) ) > 0 y^{(j)} \cdot f\left(x^{(j)}\right)>0 y(j)f(x(j))>0 。现在需要找到一组参数满足更强的条件,即 y ( j ) ⋅ f ( x ( j ) ) ⩾ 1 y^{(j)} \cdot f\left(x^{(j)}\right) \geqslant 1 y(j)f(x(j))1

仍 然 固 定 b = 0 , b=0, \quad b=0, 于 是 预 测 公 式 f ( x ) = ∑ i = 1 m α i y ( i ) K ( x ( i ) , x ) , f(x)=\sum_{i=1}^{m} \alpha_{i} y^{(i)} K\left(x^{(i)}, x\right), f(x)=i=1mαiy(i)K(x(i),x), y ( j ) f ( x ( j ) ) y^{(j)} f\left(x^{(j)}\right) y(j)f(x(j)) 展开,有
y ( j ) f ( x ( j ) ) = y ( j ) ∑ i = 1 m α i y ( i ) K ( x ( i ) , x ( j ) ) = α j y ( j ) y ( j ) K ( x ( j ) , x ( j ) ) + ∑ i = 1 , i ≠ j m α i y ( i ) y ( j ) K ( x ( i ) , x ( j ) ) = α j + ∑ i = 1 , i ≠ j m α i y ( i ) y ( j ) K ( x ( i ) , x ( j ) ) \begin{aligned} y^{(j)} f\left(x^{(j)}\right) &=y^{(j)} \sum_{i=1}^{m} \alpha_{i} y^{(i)} K\left(x^{(i)}, x^{(j)}\right) \\ &=\alpha_{j} y^{(j)} y^{(j)} K\left(x^{(j)}, x^{(j)}\right)+\sum_{i=1, i \neq j}^{m} \alpha_{i} y^{(i)} y^{(j)} K\left(x^{(i)}, x^{(j)}\right) \\ &=\alpha_{j}+\sum_{i=1, i \neq j}^{m} \alpha_{i} y^{(i)} y^{(j)} K\left(x^{(i)}, x^{(j)}\right) \end{aligned} y(j)f(x(j))=y(j)i=1mαiy(i)K(x(i),x(j))=αjy(j)y(j)K(x(j),x(j))+i=1,i=jmαiy(i)y(j)K(x(i),x(j))=αj+i=1,i=jmαiy(i)y(j)K(x(i),x(j))
观察式上式,$ 可以把每个 α j \alpha_{j} αj 都选择一个很大的值,同时取一个非常小的 γ , \gamma, γ, 使得核映射项 K ( x ( i ) , x ( j ) ) K\left(x^{(i)}, x^{(j)}\right) K(x(i),x(j)) 非常小,于是 α j \alpha_{j} αj 在上式中占据绝对主导地位。这样就保证对任意 j j j y ( j ) f ( x ( j ) ) > 1 , y^{(j)} f\left(x^{(j)}\right)>1, y(j)f(x(j))>1, 满足 SVM 解的条件。因此 SVM 最优解也满足上述条件,同时一定使模型分类误差为 0 。

问题4:加入松弛变量SVM的训练误差可以为 0 吗?

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

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

02: 逻辑回归

逻辑回归( Logistic Regression )可以说是机器学习领域最基础也是最常用的模型,逻辑回归的原理推导以及扩展应用几乎是算法工程师的必备技能 。 医生病理诊断、银行个人信用评估、邮箱分类I主极邮件等,无不体现逻辑回归精巧而广泛的应用 。 本小节将从模型与原理出发,涵盖扩展与应用,一探逻辑回归的真谛。

知识点:逻辑回归,线性回归,多标签分类, Softmax

问题1:逻辑回归相比于线性回归,有何异同?

逻辑回归,乍一听名字似乎和数学中的线性回归问题异派同源,但其本质却是大相径庭 。

首先,逻辑回归处理的是分类问题,线性回归处理的是回归问题,这是两者的最本质的区别。逻辑回归中因变量取值是一个二元分布,模型学习得出的是 E [ y ∣ x ; θ ] , E[y \mid x ; \theta], E[yx;θ], 即给定自变量和超参数后,得到因变量的期望,并基于此期望来处理预测分类问题。而线性回归中实际上求解的是 y ′ = θ T x , y^{\prime}=\theta^{\mathrm{T}} x, y=θTx, 是对我们假设的真实关系 y = θ T x + ϵ y=\theta^{\mathrm{T}} x+\epsilon y=θTx+ϵ 的一个近似,其中 ϵ \epsilon ϵ 代表误差项,我们使用这个近似项来处理回归问题。分类和回归是如今机器学习中两个不同的任务,而属于分类算法的逻辑回归,其命名有一定的历史原因。这个方法最早由统计学家 David Cox 在他 1958 年的论文 《二元序列中的回归分析 》 ( 》( ( The regression analysis of binary sequences ) ) 中提山,当时人们对于回归与分类的定义与今天有一定区别,只是将“回归"这一名字沿用了。实际上,将逻辑回归的公式进行整理, 我们可以得到log p 1 − p = θ T x , \frac{p}{1-p}=\theta^{\mathrm{T}} x, 1pp=θTx, 其中 p = P ( y = 1 ∣ x ) p=P(y=1 \mid x) p=P(y=1x) 也就是将给定输入 x x x 预测为正样本的概率。如果把一个事件的几率(odds ) ) 定义为该事件发生的概率与该事件不发生的概率的比值 p 1 − p , \frac{p}{1-p}, 1pp, 那么逻辑 回归可以車作是对于 “ y = 1 ∣ x " y=1 \mid x " y=1x" 这一事件的对数几率的线性回归,于是逻辑回归" 这一称谓也就延续了下来。

在关于逻辑回归的讨论中,我们均认为 y y y 是因变量,而非 p 1 − p \frac{p}{1-p} 1pp, 这便引出逻辑回归与线性回归最大的区别,即逻辑回归中的因变量为离散的,而线性回归中的因变量是连续的。并且在自变量 x x x 与超参数 θ \theta θ 确定的情况下,逻辑回归可以看作广义线性模型(Generalized Linear Models ) ) 在因变量 y y y 服从二元分布时的一个特殊情况; 而使用最小二乘法求解线性回归时,我们认为因变量 y y y 服从正态分布。

当然逻辑回归和线性回归也不之相同之处,首先我们可以认为二者都使用了极大似然估计来对训练样本进行建模。线性回归使用最小二乘法,实际上就是在自变量 x x x 与超参数 θ \theta θ 确定,因变量 y y y 服从正态分布的假设下,使用极大似然估计的一个化简; 而逻辑回归中通过对似然函数 L ( θ ) = ∏ i = 1 N P ( y i ∣ x i θ ) = ∏ i = 1 N ( π ( x i ) ) y i ( 1 − π ( x i ) ) 1 − y i L(\theta)=\prod_{i=1}^{N} P\left(y_{i} \mid x_{i}\theta\right)=\prod_{i=1}^{N}\left(\pi\left(x_{i}\right)\right)^{y_{i}}\left(1-\pi\left(x_{i}\right)\right)^{1-y_{i}} L(θ)=i=1NP(yixiθ)=i=1N(π(xi))yi(1π(xi))1yi 的学习 , , , 得到最佳参数 θ ∘ \theta_{\circ} θ
另外,二者在求解超参数的过程中,都可以使用梯度下降的方法,这也是监督学习中一个常见的相似之处。

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

使用哪一种办法来处理多分类的问题取决于具体问题的是义 。 首先,如果一个样本只对应于一个标签,我们可以假设每个样本属于不同标签的概率服从于几何分布,使用多项逻辑回归( Softmax Regression )来进行分类

h θ ( x ) = [ p ( y = 1 ∣ x ; θ ) p ( y = 2 ∣ x ; θ ) ⋮ p ( y = k ∣ x ; θ ) ] = 1 ∑ j = 1 k e θ j T x [ e θ 1 T x e θ 2 T x ⋮ e θ k T x ] h_{\theta}(x)=\left[\begin{array}{c} p(y=1 \mid x ; \theta) \\ p(y=2 \mid x ; \theta) \\ \vdots \\ p(y=k \mid x ; \theta) \end{array}\right]=\frac{1}{\sum_{j=1}^{k} \mathrm{e}^{\theta_{j}^{\mathrm{T}} x}}\left[\begin{array}{c} \mathrm{e}^{\theta_{1}^{\mathrm{T}} x} \\ \mathrm{e}^{\theta_{2}^{\mathrm{T}} x} \\ \vdots \\ \mathrm{e}^{\theta_{k}^{\mathrm{T}} x} \end{array}\right] hθ(x)=p(y=1x;θ)p(y=2x;θ)p(y=kx;θ)=j=1keθjTx1eθ1Txeθ2TxeθkTx
其中 θ 1 , θ 2 , … , θ k ∈ R n \theta_{1}, \theta_{2}, \ldots, \theta_{k} \in \mathbb{R}^{n} θ1,θ2,,θkRn 为模型的参数 , , , 而辛 1 ∑ j = 1 k e θ j T x \frac{1}{\sum_{j=1}^{k} \mathrm{e}^{\theta_{j}^{\mathrm{T} x}}} j=1keθjTx1 可以看作是对概率的归一化。为了方便起见,我们将 { θ 1 , θ 2 , … , θ k } \left\{\theta_{1}, \theta_{2}, \ldots, \theta_{k}\right\} {θ1,θ2,,θk} k k k 个列向量按顺序排列形成 n × k n \times k n×k 维矩阵,写作 θ , \theta, θ, 表示整个参数集。一般来说,多项逻辑回归具有参数冗余的特点,即将 θ 1 , θ 2 , … , θ k \theta_{1}, \theta_{2}, \ldots, \theta_{k} θ1,θ2,,θk 同时加减一个向量后预测结果不变。特别地,当类别数为 2 时,
h θ ( x ) = 1 e e T x + e θ 2 ⊤ x [ e θ 1 ⊤ x e θ 2 ⊤ x ] h_{\theta}(x)=\frac{1}{\mathrm{e}^{\mathrm{e}^{\mathrm{T}} x}+\mathrm{e}^{\theta_{2}^{\top} x}}\left[\begin{array}{c} \mathrm{e}^{\theta_{1}^{\top} x} \\ \mathrm{e}^{\theta_{2}^{\top} x} \end{array}\right] hθ(x)=eeTx+eθ2x1[eθ1xeθ2x]
利用参数冗余的特点,我们将所有参数减去 θ 1 , \theta_{1}, θ1, 式 (3.16) 变为
h θ ( x ) = 1 e 0 ⋅ x + e ( θ 2 T − θ 1 T ) x [ e 0 ⋅ x e ( θ 2 ⊤ − θ 1 ⊤ ) x ] = [ 1 1 + e T T x 1 − 1 1 + e θ T x ] \begin{aligned} h_{\theta}(x) &=\frac{1}{\mathrm{e}^{0 \cdot x}+\mathrm{e}^{\left(\theta_{2}^{\mathrm{T}}-\theta_{1}^{\mathrm{T}}\right) x}}\left[\begin{array}{c} \mathrm{e}^{0 \cdot x} \\ \mathrm{e}^{\left(\theta_{2}^{\top}-\theta_{1}^{\top}\right) x} \end{array}\right] \\ &=\left[\begin{array}{c} \frac{1}{1+\mathrm{e}^{\mathrm{T}^{\mathrm{T}} x}} \\ 1-\frac{1}{1+\mathrm{e}^{\theta^{\mathrm{T} x}}} \end{array}\right] \end{aligned} hθ(x)=e0x+e(θ2Tθ1T)x1[e0xe(θ2θ1)x]=[1+eTTx111+eθTx1]
其中 θ = θ 2 − θ 1 ∘ \theta=\theta_{2}-\theta_{1} \circ θ=θ2θ1 而整理后的式子与逻辑回归一致。因此,多项逻辑回归实际上是二分类逻辑回归在多标签分类下的一种拓展。

当存在样本可能居于多个标签的情况时,我们可以训练 k 个二分类的逻辑回归分类器 。第 i 个分类器用以区分每个样本是否可以归为第 i 类,训练该分类器时,需要把标签重新整理为“第 i 类标签 ” 与“ 非第 i 类标签”两类。通过这样办法, 我们就解决了每个样本可能拥有多个标签的情况。

03:决策树

时间旱上八点,地点.婚介所 。
“闺女,我又给你找了个合适的对象,今天要不要见一面?”
“多大?” 26 岁。”
“长得帅吗?” “还可以,不算太帅 。”
“工资高么?” “略高于平均水平。"
“会写代码吗? " “人家是程序员, 代码写得很棒呢!
“好,那把他联系方式发来吧, 我抽空见一面。”

这便是中国特色相亲故事,故事中的女孩做决定的过程就是一个典型的决策树分类,如图 3 . 13 所示 。通过年龄、长相、工资、是否会编程等属性对男生进行了两个类别的分类:见或不见。

在这里插入图片描述
决策树是一种自上而下,对样本数据进行树形分类的过程,由结点和有向边组成 。 结点分为内部结点和叶结点,其中每个内部结点表示一个特征或属性,叶结点表示类别。从顶部根结点开始,所有样本聚在起。经过根结点的划分,样本被分到不同的子结点中 。再根据子结点的特征进一步划分,直至所有样本都被归到某一个类别(即叶结点)中 。

决策树作为最基础、最常见的有监督学习模型,常被用于分类问题和回归问题,在市场营销和生物医药等领域尤真受欢迎,主要因为树形结构与销售 、诊断等场景下的决策过程十分相似 。 将决策树应用集成学习的思想可以得到随机森林、梯度提升决策树等模型,这些将在第 12 章中详细介绍 。 完全生长的决策树模型具有简单直观、解释性强的特点,值得读者认真理解,这也是为融会贯通集成学习相关内容所做的铺垫 。

一般而言 ,决策树的生成包含了特征选择、树的构造、树的剪枝三个过程,本节将在第一个问题中对几种常用的决策树进行对比,在第二个问题中探讨决策树不同剪枝方法之间的区别与联系。

知识点:信息论,树形数据结构,优化理论

问题1:决策树有哪些常用的启发函数?

我们知道,决策树的目标是从一组样本数据中, 根据不同的特征和属性,建立一棵树形的分类结构。我们既希望它能拟合训练数据,达到好的分类效果,同时又希望控制真复杂度,使得模型真奇一定的泛化能力 。 对于 个特定的问题,决策树的选择可能高很多种。比如,在场景描述中,如果女孩把会写代码这一属性放在根结点考虑,可能只需要很简单的一个树结构就能完成分类,如图 3.14 所示 。
在这里插入图片描述
从若干不同的决策树中选取最优的决策树是一个 NP 完全问题,在实际中我们通常会采用启发式学习的方法去构建一棵满足启发式条件的决策树。常用的决策树算法有 ID3, C4.5, CART ,它们构建树所使用的启发式函数各是什么?除了构建准则之外,它们之间的区别与联系是什么?

首先,我们回顾一下这几种决策树构造时使用的准则 。

  • ID3一一最大信息增益
    对于样本集合 D , D, D, 类别数为 K , K, K, 数据集 D D D 的经验嫡表示为
    H ( D ) = − ∑ k = 1 K ∣ C k ∣ ∣ D ∣ log ⁡ 2 ∣ C k ∣ ∣ D ∣ H(D)=-\sum_{k=1}^{K} \frac{\left|C_{k}\right|}{|D|} \log _{2} \frac{\left|C_{k}\right|}{|D|} H(D)=k=1KDCklog2DCk
    其中 C k C_{k} Ck 是样本集合 D D D 中属于第 k k k 类的样本子集, ∣ C k ∣ \left|C_{k}\right| Ck 表示该子集的元素个数, ∣ D ∣ |D| D 表示样本集合的元素个数。

然后计算某个特征 A A A 对于数据集 D D D 的经验条件嫡 H ( D ∣ A ) H(D \mid A) H(DA)
H ( D ∣ A ) = ∑ i = 1 n ∣ D i ∣ ∣ D ∣ H ( D i ) = ∑ i = 1 n ∣ D i ∣ ∣ D ∣ ( − ∑ k = 1 k ∣ D i k ∣ ∣ D i ∣ log ⁡ 2 ∣ D i k ∣ ∣ D i ∣ ) H(D \mid A)=\sum_{i=1}^{n} \frac{\left|D_{i}\right|}{|D|} H\left(D_{i}\right)=\sum_{i=1}^{n} \frac{\left|D_{i}\right|}{|D|}\left(-\sum_{k=1}^{k} \frac{\left|D_{i k}\right|}{\left|D_{i}\right|} \log _{2} \frac{\left|D_{i k}\right|}{\left|D_{i}\right|}\right) H(DA)=i=1nDDiH(Di)=i=1nDDi(k=1kDiDiklog2DiDik)
其中, D i D_{i} Di 表示 D D D 中特征 A A A 取第 i i i 个值的样本子集 , D i k , D_{i k} ,Dik 表示 D i D_{i} Di 中属于第 k k k 类的样本子集。

于是信息增益 g ( D , A ) g(D, A) g(D,A) 可以表示为二者之差,可得
g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D, A)=H(D)-H(D \mid A) g(D,A)=H(D)H(DA)

这些定义听起来有点像绕口令,不妨我们用一个例子来简单说明下计算过程。假设共有 5 个人追求场景中的女孩,年龄有两个属性(老,年轻 ) , ), , 长相有三个属性 ( ( ( , , , 一般, 丑 ) , ), ), 工资有三个属性 ( ( ( , , , 中等 , , , ) , ), , 会写代码有两个属性 ( 会,不会 ) , ), ), 最终分类结果有两类(见,不见 )。我们根据女孩有监督的主观意愿可以得到表 3.1。
在这里插入图片描述
在这个问题中,
H ( D ) = − 3 5 log ⁡ 2 3 5 − 2 5 log ⁡ 2 2 5 = 0.971 H(D)=-\frac{3}{5} \log _{2} \frac{3}{5}-\frac{2}{5} \log _{2} \frac{2}{5}=0.971 H(D)=53log25352log252=0.971
根据式 (3.19) 可计算出 4 个分支结点的信息嫡为
H ( D ∣  年岭  ) = 1 5 H (  老  ) + 4 5 H (  年轻  ) = 1 5 ( − 0 ) + 4 5 ( − 2 4 log ⁡ 2 2 4 − 2 4 log ⁡ 2 2 4 ) = 0.8 H ( D ∣  长相  ) = 1 5 H (  帅  ) + 3 5 H ( −  般  ) + 1 5 H (  为  ) = 0 + 3 5 ( − 2 3 log ⁡ 2 2 3 − 1 3 log ⁡ 2 1 3 ) + 0 = 0.551 \begin{aligned} H(D \mid \text { 年岭 }) &=\frac{1}{5} H(\text { 老 })+\frac{4}{5} H(\text { 年轻 }) \\ &=\frac{1}{5}(-0)+\frac{4}{5}\left(-\frac{2}{4} \log _{2} \frac{2}{4}-\frac{2}{4} \log _{2} \frac{2}{4}\right)=0.8 \\ H(D \mid \text { 长相 }) &=\frac{1}{5} H(\text { 帅 })+\frac{3}{5} H(-\text { 般 })+\frac{1}{5} H(\text { 为 }) \\ &=0+\frac{3}{5}\left(-\frac{2}{3} \log _{2} \frac{2}{3}-\frac{1}{3} \log _{2} \frac{1}{3}\right)+0=0.551 \end{aligned} H(D 年岭 )H(D 长相 )=51H(  )+54H( 年轻 )=51(0)+54(42log24242log242)=0.8=51H(  )+53H(  )+51H(  )=0+53(32log23231log231)+0=0.551

H ( D ∣  工资  ) = 3 5 H (  高  ) + 1 5 H (  中等  ) + 1 5 H (  低  ) = 3 5 ( − 2 3 log ⁡ 2 2 3 − 1 3 log ⁡ 2 1 3 ) + 0 + 0 = 0.551 H ( D ∣  写代码  ) = 3 5 H (  不会  ) + 2 5 H (  会  ) = 3 5 ( 0 ) + 2 5 ( 0 ) = 0 \begin{aligned} H(D \mid \text { 工资 })=& \frac{3}{5} H(\text { 高 })+\frac{1}{5} H(\text { 中等 })+\frac{1}{5} H(\text { 低 }) \\ &=\frac{3}{5}\left(-\frac{2}{3} \log _{2} \frac{2}{3}-\frac{1}{3} \log _{2} \frac{1}{3}\right)+0+0=0.551 \\ H(D \mid \text { 写代码 }) &=\frac{3}{5} H(\text { 不会 })+\frac{2}{5} H(\text { 会 }) \\ &=\frac{3}{5}(0)+\frac{2}{5}(0)=0 \end{aligned} H(D 工资 )=H(D 写代码 )53H(  )+51H( 中等 )+51H(  )=53(32log23231log231)+0+0=0.551=53H( 不会 )+52H(  )=53(0)+52(0)=0

于是,根据式 (3.20) 可计算出各个特征的信息增益为
g ( D ,  年龄  ) = 0.171 , g ( D ,  长相  ) = 0.42 g ( D ,  工资  ) = 0.42 , g ( D ,  写代码  ) = 0.971. \begin{array}{l} g(D, \text { 年龄 })=0.171, g(D, \text { 长相 })=0.42 \\ g(D, \text { 工资 })=0.42, \quad g(D, \text { 写代码 })=0.971 . \end{array} g(D, 年龄 )=0.171,g(D, 长相 )=0.42g(D, 工资 )=0.42,g(D, 写代码 )=0.971.
显然,特征“写代码" 的信息增益最大,所有的样本根据此特征,可以直接被分到叶结点(即见或不见 ) 中,完成决策树生长。当然,在实际应用中,决策树往往不能通过一个特征就完成构建,需要在经验嫡非 0 的类别中继续生长。

  • C4.5一一最大信息蹭益比
    特征 A A A 对于数据集 D D D 的信息增益比定义为
    g R ( D , A ) = g ( D , A ) H A ( D ) g_{R}(D, A)=\frac{g(D, A)}{H_{A}(D)} gR(D,A)=HA(D)g(D,A)
    其中
    H A ( D ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ log ⁡ 2 ∣ D i ∣ ∣ D ∣ H_{A}(D)=-\sum_{i=1}^{n} \frac{\left|D_{i}\right|}{|D|} \log _{2} \frac{\left|D_{i}\right|}{|D|} HA(D)=i=1nDDilog2DDi
    称为数据集 D D D 关于 A A A 的取值嫡。针对上述问题, 我们可以根据式 (3.22)
    求出数据集关于每个特征的取值嫡为
    H 年龄  ( D ) = − 1 5 log ⁡ 2 1 5 − 4 5 log ⁡ 2 4 5 = 0.722 , H_{\text {年龄 }}(D)=-\frac{1}{5} \log _{2} \frac{1}{5}-\frac{4}{5} \log _{2} \frac{4}{5}=0.722, H年龄 (D)=51log25154log254=0.722,
    H 长相  ( D ) = − 1 5 log ⁡ 2 1 5 − 3 5 log ⁡ 2 3 5 − 1 5 log ⁡ 2 1 5 = 1.371 H 工资  ( D ) = − 3 5 log ⁡ 2 3 5 − 1 5 log ⁡ 2 1 5 − 1 5 log ⁡ 2 1 5 = 1.371 H 写代码  ( D ) = − 3 5 log ⁡ 2 3 5 − 2 5 log ⁡ 2 2 5 = 0.971 \begin{array}{l} H_{\text {长相 }}(D)=-\frac{1}{5} \log _{2} \frac{1}{5}-\frac{3}{5} \log _{2} \frac{3}{5}-\frac{1}{5} \log _{2} \frac{1}{5}=1.371 \\ H_{\text {工资 }}(D)=-\frac{3}{5} \log _{2} \frac{3}{5}-\frac{1}{5} \log _{2} \frac{1}{5}-\frac{1}{5} \log _{2} \frac{1}{5}=1.371 \\ \quad H_{\text {写代码 }}(D)=-\frac{3}{5} \log _{2} \frac{3}{5}-\frac{2}{5} \log _{2} \frac{2}{5}=0.971 \end{array} H长相 (D)=51log25153log25351log251=1.371H工资 (D)=53log25351log25151log251=1.371H写代码 (D)=53log25352log252=0.971

于是,根据式 (3.21) 可计算出各个特征的信息增益比为
g R ( D ,  年龄  ) = 0.236 , g R ( D ,  长相  ) = 0.402 , g_{R}(D, \text { 年龄 })=0.236, g_{R}(D, \text { 长相 })=0.402, gR(D, 年龄 )=0.236,gR(D, 长相 )=0.402,
g R ( D ,  工资  ) = 0.402 , g R ( D ,  写代码  ) = 1. g_{R}(D, \text { 工资 })=0.402, g_{R}(D, \text { 写代码 })=1 . gR(D, 工资 )=0.402,gR(D, 写代码 )=1.
信息增益比最大的仍是特征“写代码”, 但通过信息增益比, 特征“年龄" 对应的指标上开了,而特征“长相" 和特征“工资" 却有所下降。

  • CART-最大基尼指数(Gini)
    Gini 描述的是数据的纯度,与信息嫡含义类似。
    Gini ⁡ ( D ) = 1 − ∑ k = 1 n ( ∣ C k ∣ ∣ D ∣ ) 2 \operatorname{Gini}(D)=1-\sum_{k=1}^{n}\left(\frac{\left|C_{k}\right|}{|D|}\right)^{2} Gini(D)=1k=1n(DCk)2
    CART 在每一次迭代中选择基尼指数最小的特征及其对应的切分点进行分类。但与 ID3、C4.5 不同的是, KART 是一颗二叉树,采用二元切割法, 每一步将数据按特征 A A A 的取值切成两份, 分别进入左右子树。特征 A A A 的 Gini 指数定义为
    Gini ⁡ ( D ∣ A ) = ∑ i = 1 n ∣ D i ∣ ∣ D ∣ Gini ⁡ ( D i ) \operatorname{Gini}(D \mid A)=\sum_{i=1}^{n} \frac{\left|D_{i}\right|}{|D|} \operatorname{Gini}\left(D_{i}\right) Gini(DA)=i=1nDDiGini(Di)
    还是考虑上述的例子,应用 CART 分类准则,根据式(3.24 ) 可
    计算出各个特征的 Gini 指数为
    Gini ⁡ ( D ∣  年龄  =  老  ) = 0.4 , Gini ⁡ ( D ∣  年龄  =  年轻  ) = 0.4 Gini ⁡ ( D ∣  长相  =  帅  ) = 0.4 , Gini ⁡ ( D ∣  长相  =  丑  ) = 0.4 Gini ⁡ ( D ∣  写代码  =  会  ) = 0 , Gini ⁡ ( D ∣  写代码  =  不会  ) = 0 Gini ⁡ ( D ∣  工资  =  高  ) = 0.47 , Gini ⁡ ( D ∣  工资  =  中等  ) = 0.3 Gini ⁡ ( D ∣  工资  =  低  ) = 0.4 \begin{array}{ll} \operatorname{Gini}(D \mid \text { 年龄 }=\text { 老 })=0.4, & \operatorname{Gini}(D \mid \text { 年龄 }=\text { 年轻 })=0.4 \\ \operatorname{Gini}(D \mid \text { 长相 }=\text { 帅 })=0.4, & \operatorname{Gini}(D \mid \text { 长相 }=\text { 丑 })=0.4 \\ \operatorname{Gini}(D \mid \text { 写代码 }=\text { 会 })=0, & \operatorname{Gini}(D \mid \text { 写代码 }=\text { 不会 })=0 \\ \operatorname{Gini}(D \mid \text { 工资 }=\text { 高 })=0.47, \operatorname{Gini}(D \mid \text { 工资 }=\text { 中等 })=0.3 \\ \operatorname{Gini}(D \mid \text { 工资 }=\text { 低 })=0.4 \end{array} Gini(D 年龄 =  )=0.4,Gini(D 长相 =  )=0.4,Gini(D 写代码 =  )=0,Gini(D 工资 =  )=0.47,Gini(D 工资 = 中等 )=0.3Gini(D 工资 =  )=0.4Gini(D 年龄 = 年轻 )=0.4Gini(D 长相 =  )=0.4Gini(D 写代码 = 不会 )=0
    在“年龄” “长相” “工资” “写代码”四个特征中,我们可以很快地发现特征“写代码”的 Gini 指数最小为 0 ,因此选择特征“写代码”作为最优特征, “写代码=会”为最优切分点 。 按照这种切分,从根结点会直接产生两个日十结点 3 墓尼指数降为0 ,完成决策树生长 。

通过对比三种决策树的构造准则,以及在同一例子上的不同表现,我们不难总结三者之间的差异 。

首先, ID3 是采用信息增益作为评价标准,除了“会写代码”这一逆天特征外,会倾向于取僵较多的特征 。 因为,信息增益反映的是给定条件以后不确定性减少的程度 1 特征取值越多就意昧着确定性更高,也就是条件熵越小,信息增益越大 。 这在实际应用中是一个缺陷 。 比如,我们引入特征 “ DNA”,每个人的DNA都不同,如果ID3按照“DNA”特征进行划分一定是最优的 ( 条件熵为 0 ) ’ 但这种分类的泛化能力是非常弱的。因此,C4.5 实际上是对 ID3 进行优化 3 通过引入信息增益比,一定程度上对取值比较多的特征进行惩罚,避免 ID3 出现过拟台的特性,提升决策树的泛化能力。

其次,从样本类型的角度,ID3 只能处理菌散型变量, 而 C4.5 和CART 都可以处理连续型变量。 C4.5 处理连续型变量时,通过对数据排序之后找到类别不罔的分割线作为切分点 3 根据切分点把连续属性转为布尔型,从而将连续型变量转换多个取值区间的离散型变量。 而对于 CART,由于真构建时每次都会对特征进行二值划分,因此可以很好地适用于连续性变量。

从应用角度,ID3 和 C4.5 只能用于分类任务, 而CART (Classfication and Regression Tree ,分类回归树)从名字就可以看出真不仅可以用于分类,也可以应用于回归任务(回归树使用最小平方误差准则)。

此外,从实现细节、优化过程等角度,这三种决策树还有一些不同 。比如,ID3 对样本特征缺失值比较敏感,而 C4.5 和 CART 可以对缺失值进行不同方式的处理; ID3 和 C4. 5 可以在每个结点上产生出多叉分支,且每个特征在层级之间不会复用,而 CART 每个结点只会产生两个分支,因此最后会形成一颗二叉树,且每个特征可以被重复使用;ID3 和 C4.5 通过剪枝来权衡树的准确性与泛化能力,而 CART 直接利用全部数据发现所有可能的树结构进行对比。

至此,我们从构造、 应用 、 实现等角度对比了 ID3 , C4.5 、 CART这三种经典的决策树模型 。 这些区别与联系总结起来容易,但在实际应用中还需要读者慢慢体会, 针对不同场景灵活变通。

问题2:如何对决策树避行剪枝?

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

决策树的剪枝通常高两种方法,预剪枝( Pre -Prun i ng )和 后剪枝( Post - Pruning )那么这两种万法是如何进行的呢? 它们又各有什么优缺点?

预剪枝,即在生成决策树的过程中提前停止树的增长 。 而后剪枝 ,是在它生成的过拟合决策树上进行剪枝, 得到简化版的剪枝决策树。

  • 预剪枝
    预剪枝的核心思想是在树中结点进行扩展之前,先计算当前的划分是否能带来模型泛化能力的提升,如果不能,则不再继续生长子树 。此时可能存在不同类别的样本同时存于结点中,按照多数投票的原则判断该结点所属类别。预剪枝对于何时停止决策树的生长有以下几种方法 。
    ( 1 )当树到达一定深度的时候,停止树的主长 。
    ( 2 )当到达当前结点的样本数量小于某个阈值的时候,停止树的生长 。
    ( 3 )计算每次分裂对测试集的准确度提升,当小于某个阈值的时候 ,不再继续扩展 。

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

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

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

代价复杂剪枝主要包含以下两个步骤。
( 1 ) 从完整决策树 T 0 T_{0} T0 开始,生成一个子树序列 { T 0 , T 1 , T 2 , … , T n } \left\{T_{0}, T_{1}, T_{2}, \ldots, T_{n}\right\} {T0,T1,T2,,Tn},
其中 T i + 1 T_{i+1} Ti+1 T i T_{i} Ti 生成 , T n , T_{n} ,Tn 为树的根结点。
(2) 在子树序列中,根据真实误差选择最佳的决策树。步骤(1)从 T 0 T_{0} T0 开始,裁剪 T i T_{i} Ti 中关于训练数据集合误差增加最小的分支以得到 T i + 1 T_{i+1} Ti+1 。具体地,当一棵树 T T T 在结点 t t t 处剪枝时,它的误差增加可以用 R ( t ) − R ( T i ) R(t)-R\left(T_{i}\right) R(t)R(Ti) 表示,其中 R ( t ) R(t) R(t) 表示进行剪枝之后的该结点误差, R ( T t ) R\left(T_{t}\right) R(Tt)表示未进行剪枝时子树 T t T_{t} Tt 的误差。考虑到树的复杂性因素,我们用 ∣ L ( T t ) ∣ \left|L\left(T_{t}\right)\right| L(Tt)表示子树 T t T_{t} Tt 的叶子结点个数,则树在结点 t t t 处剪枝后的误差增加率为
α = R ( t ) − R ( T t ) ∣ L ( T t ) ∣ − 1 \alpha=\frac{R(t)-R\left(T_{t}\right)}{\left|L\left(T_{t}\right)\right|-1} α=L(Tt)1R(t)R(Tt)
在得到 T i T_{i} Ti 后,我们每步选择 α \alpha α 最小的结点进行相应剪枝。

用一个例子简单地介绍生成子树序列的方法。假设把场景中的问题进行一定扩展,女孩需要对 80 个人进行见或不见的分类。假设根据某种规则,已经得到了一棵 CART 决策树 T 0 , T_{0}, T0, 如图 3.15 所示。此时共 5 个内部结点可供考虑,其中 α ( t 0 ) = 25 − 5 6 − 1 = 4 α ( t 1 ) = 10 − ( 1 + 2 + 0 + 0 ) 4 − 1 = 2.33 α ( t 2 ) = 5 − ( 1 + 1 ) 2 − 1 = 3 α ( t 3 ) = 4 − ( 1 + 2 ) 2 − 1 = 1 α ( t 4 ) = 4 − 0 2 − 1 = 4 \begin{array}{c} \alpha\left(t_{0}\right)=\frac{25-5}{6-1}=4 \\ \alpha\left(t_{1}\right)=\frac{10-(1+2+0+0)}{4-1}=2.33 \\ \alpha\left(t_{2}\right)=\frac{5-(1+1)}{2-1}=3 \\ \alpha\left(t_{3}\right)=\frac{4-(1+2)}{2-1}=1 \\ \alpha\left(t_{4}\right)=\frac{4-0}{2-1}=4 \end{array} α(t0)=61255=4α(t1)=4110(1+2+0+0)=2.33α(t2)=215(1+1)=3α(t3)=214(1+2)=1α(t4)=2140=4
可见 α ( t 3 ) \alpha\left(t_{3}\right) α(t3) 最小 , , , 因此对 t 3 t_{3} t3 进行剪枝, 得到新的子树 T 1 , T_{1}, T1, 如图 3.16 所示。

在这里插入图片描述

而后继续计算所有结点对应的误差增加率,分别为 α ( t 1 ) = 3 \alpha\left(t_{1}\right)=3 α(t1)=3, α ( t 2 ) = 3 , α ( t 4 ) = 4 \alpha\left(t_{2}\right)=3, \alpha\left(t_{4}\right)=4 α(t2)=3,α(t4)=4 。因此对 t 1 t_{1} t1 进行前枝,得到 T 2 , T_{2}, T2, 如图 3.17 所示。此时 α ( t 0 ) = 6.5 , α ( t 2 ) = 3 , \alpha\left(t_{0}\right)=6.5, \alpha\left(t_{2}\right)=3, α(t0)=6.5,α(t2)=3, 选择 t 2 t_{2} t2 进行剪枝,得到 T 3 ∘ T_{3 \circ} T3 于是只剩下一个内部结点,即根结点,得到 T 4 T_{4} T4

在步骤( 2 )中, 我们需要从子树序列中选出真实误差最小的决策树。CCP 给出了两种常用的方法:一种是基于独立剪枝数据集,该方法与REP类似,但由于其只能从子树序列 { T 0 , T 1 , T 2 , … , T n } \left\{T_{0}, T_{1}, T_{2}, \ldots, T_{n}\right\} {T0,T1,T2,,Tn} 中选择最佳决策树,而非像 REP 能在所有可能的子树中寻找最优解,因此性能上会有一定不足。另一种是基于 k k k 折交叉验证,将数据集分成 k k k 份,前 k − 1 k-1 k1 份用于生成决策树,最后一份用于选择最优的剪枝树。重复进行 N N N 次,再从这 N N N 个子树中选择最优的子树。

在这里插入图片描述

代价复杂度剪枝使用交叉验证策略时,不需要测试数据集,精度与REP 差不多,但形成的树复杂度小 。 而从算法复杂度角度,由于生成子树序列的时间复杂度与原始决策树的非叶结点个数呈二次关系,导致算法相比 REP 、 PEP 、 MEP 等线性复杂度的后剪枝万法,运行时间开销更大。

剪枝过程在决策树模型中占据着极真重要的地位。有很多研究表明剪枝比树的生成过程更为关键。对于不同划分标准生成的过拟合决策树。在经过剪枝之后都能保留最重要的属性划分,因此最终的性能差距并不大。理解剪枝方法的理论,在实际应用中根据不同的数据类型、规模,决定使用何种决策树以及对应的剪枝策略,灵活变通,找到最优选择,是本节想要传达给读者的思想 。

参考

参考内容:《百面机器学习》

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值