三、经典算法


随着神经网络模型日趋火热,深度学习大有一统江湖之势,传统机器学习算法似乎已经彻底被深度学习的光环所笼罩。然而,深度学习是数据驱动的,失去了数据,再精密的深度网络结构也是 画饼充饥,无的放矢。在很多实际问题中,我们很难得到海量且带有精确标注的数据,这时深度学习也就没有大显身手的余地,反而许多传统方法可以灵活巧妙地进行处理。

支持向量机

算法详细介绍

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

这些点在分类超平面(绿色直线)上相互间隔,并不是线性 可分的。考虑一个更简单的反例,设想二维空间中只有两个样本点,每个点各属于一类的分类任务,此时SVM的分类超平面(直线)就是两个样本点连线的中垂 线,两个点在分类面(直线)上的投影会落到这条直线上的同一个点,自然不是线性可分的。

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

存在,证明如下:
在这里插入图片描述
在这里插入图片描述

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

上一个问题找到了一组参数使得SVM分类器的训练误差为0。本问旨在找到一组参数满足训练误差为0,且是SVM模型的一个解,即要满足限制条件。
在这里插入图片描述

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

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

逻辑回归

算法详细介绍

逻辑回归相比于线性回归,有何异同?

首先,逻辑回归处理的是分类问题,线性回归处理的是回归问题,这是两者的最本质的区别。
逻辑回归中,因变量取值是一个二元分布,模型学习得出的是X的情况下y=1的概率,即给定自变量和超参数后,得到因变量的期望,并基于此期望来处理预测分类问题。而线性回归中实际上求解的是对我们假设的真实关系的一个近似函数,我们使用这个近似项来处理回归问题。

当然逻辑回归和线性回归也不乏相同之处,首先我们可以认为二者都使用了极大似然估计来对训练样本进行建模。线性回归使用最小二乘法,实际上就是在自变量x与超参数θ确定,因变量y服从正态分布的假设下使用极大似然估计的。另外,二者在求解超参数的过程中,都可以使用梯度下降的方法,这也是监督学习中一个常见的相似之处。

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

对于多分类任务、我们一般有两种常见的做法,softmax回归和K个二分类器。

softmax回归

首先,如果一个样本只对应于一个标签,我们可以假设每个样本属于不同标签的概率服从于几何分布,使用多项逻辑回归(Softmax Regression)来进行分类。softmax函数解决了从一个原始的n维向量,向一个n维的概率分布映射的问题。
在这里插入图片描述
因此,多项逻辑回归实际上是二分类逻辑回归在多标签分类下的一种拓展。

K个二分类器

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

决策树

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

ID3最大信息增益

信息增益的定义是:信息熵和条件熵之差:
在这里插入图片描述
数据集D的信息熵表示为:
在这里插入图片描述
其中,|D|是所有样本的个数,k表示样本的lable一共有K种,|Ck|表示该属于当前lable的样本个数。
|Ck|/|D|其实就是该lable在数据集中出现的概率。
某个特征A对于数据集D的条件熵H(D|A)为:
在这里插入图片描述
其中,Di表示D中特征A取第i个值的样本,Dik表示Di中属于第k类的样本。

不妨我们用一个例子来简单说明下计算过程。假设共有5个人追求一个女孩,年龄有两个属性(老,年轻),长相有三个属性(帅,一般,丑),工资有三个属性(高,中等,低),会写代码有两个 属性(会,不会),最终分类结果有两类(见,不见)。我们根据女孩有监督的 主观意愿可以得到下表。
在这里插入图片描述
在这里插入图片描述
可计算出4个分支结点的信息熵为:
在这里插入图片描述
于是可计算出各个特征的信息增益为
在这里插入图片描述
显然,特征“写代码”的信息增益最大,所有的样本根据此特征,可以直接被分到叶结点(即见或不见)中,完成决策树生长。当然,在实际应用中,决策树往往不能通过一个特征就完成构建,需要在经验熵非0的类别中继续生长。

C4.5最大信息增益比

信息增益比就是在信息增益的基础上除以了取值熵。特征A对于数据集D的信息增益比定义为
在这里插入图片描述
其中A的取值熵为:
在这里插入图片描述
针对上述问题,我们可以求出数据集关于每个特征的取值熵为
在这里插入图片描述
于是,可计算出各个特征的信息增益比为
在这里插入图片描述
信息增益比最大的仍是特征“写代码”,但通过信息增益比,特征“年龄”对应的指标上升了,而特征“长相”和特征“工资”却有所下降。

CART最大基尼指数

Gini描述的是数据的纯度,与信息熵含义类似。
在这里插入图片描述
CART在每一次迭代中选择基尼指数最小的特征及其对应的切分点进行分类。 但与ID3、C4.5不同的是,CART是一颗二叉树,采用二元切割法,每一步将数据 按特征A的取值切成两份,分别进入左右子树。特征A的Gini指数定义为
在这里插入图片描述
还是考虑上述的例子,应用CART分类准则,可计算出各个特征的Gini指数为
在这里插入图片描述
在“年龄”“长相”“工资”“写代码”四个特征中,我们可以很快地发现特征“写代 码”的Gini指数最小为0,因此选择特征“写代码”作为最优特征,“写代码=会”为最 优切分点。按照这种切分,从根结点会直接产生两个叶结点,基尼指数降为0,完成决策树生长。

ID3、C4.5、CART的区别

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

如何对决策树进行剪枝

一棵完全生长的决策树会面临一个很严重的问题,即过拟合。假设我们真的需要考虑DNA特征,由于每个人的DNA都不同,完全生长的决策树所对应的每个叶结点中只会包含一个样本,这就导致决策树是过拟合的。用它进行预测时,在测试集上的效果将会很差。因此我们需要对决策树进行剪枝,剪掉一些枝叶,提升模型的泛化能力。
决策树的剪枝通常有两种方法,预剪枝(Pre-Pruning)和后剪枝(Post- Pruning)。那么这两种方法是如何进行的呢?它们又各有什么优缺点? 预剪枝,即在生成决策树的过程中提前停止树的增长。而后剪枝,是在已生成的过拟合决策树上进行剪枝,得到简化版的剪枝决策树。

预剪枝

预剪枝的核心思想是在树中结点进行扩展之前,先计算当前的划分是否能带来模型泛化能力的提升,如果不能,则不再继续生长子树。此时可能存在不同类别的样本同时存于结点中,按照多数投票的原则判断该结点所属类别。预剪枝对于何时停止决策树的生长有以下几种方法。
(1)当树到达一定深度的时候,停止树的生长。
(2)当到达当前结点的样本数量小于某个阈值的时候,停止树的生长。
(3)计算每次分裂对测试集的准确度提升,当小于某个阈值的时候,不再继 续扩展。
预剪枝具有思想直接、算法简单、效率高等特点,适合解决大规模问题。但 如何准确地估计何时停止树的生长(即上述方法中的深度或阈值),针对不同问 题会有很大差别,需要一定经验判断。且预剪枝存在一定局限性,有欠拟合的风险,虽然当前的划分会导致测试集准确率降低,但在之后的划分中,准确率可能 会有显著上升。

后剪枝

后剪枝的核心思想是让算法生成一棵完全生长的决策树,然后从最底层向上计算是否剪枝。剪枝过程将子树删除,用一个叶子结点替代,该结点的类别同样 按照多数投票的原则进行判断。同样地,后剪枝也可以通过在测试集上的准确率 进行判断,如果剪枝过后准确率有所提升,则进行剪枝。相比于预剪枝,后剪枝 方法通常可以得到泛化能力更强的决策树,但时间开销会更大。
常见的后剪枝方法包括错误率降低剪枝(Reduced Error Pruning,REP)、悲观剪枝(Pessimistic Error Pruning,PEP)、代价复杂度剪枝(Cost Complexity Pruning,CCP)、最小误差剪枝(Minimum Error Pruning,MEP)、CVP(Critical Value Pruning)、OPP(Optimal Pruning)等方法,这些剪枝方法各有利弊,关注 不同的优化角度,本文选取著名的CART剪枝方法CCP进行介绍。

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

在步骤(2)中,我们需要从子树序列中选出真实误差最小的决策树。CCP给出了两种常用的方法:一种是基于独立剪枝数据集,但其只能从子树序列{T0,T1,T2,…,Tn}中选择最佳决策树,而非在所有可能的子树中寻找最优解,因此性能上会有一定不足。另一种是基于k折交叉验证,将数据集分成k份,前k−1份用于生成决策树,最后一份用于选择最优的剪枝树。重复进行N次,再从这N个子树中选择最优的子树。
代价复杂度剪枝使用交叉验证策略时,不需要测试数据集,形成的树复杂度小。而从算法复杂度角度,由于生成子树序列的时间复杂度与原始决策树的非叶结点个数呈二次关系,导致算法相比REP、PEP、MEP等线性复杂度的后剪枝方法,运行时间开销更大。
剪枝过程在决策树模型中占据着极其重要的地位。有很多研究表明,剪枝比树的生成过程更为关键。对于不同划分标准生成的过拟合决策树,在经过剪枝之 后都能保留最重要的属性划分,因此最终的性能差距并不大。理解剪枝方法的理 论,在实际应用中根据不同的数据类型、规模,决定使用何种决策树以及对应的 剪枝策略,灵活变通,找到最优选择。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值