机器学习:支持向量机

1、间隔与支持向量

支持向量机(support vector machine)是一种经典的二分类模型,基本模型定义为特征空间中最大间隔的线性分类器,其学习的优化目标便是间隔最大化,因此支持向量机本身可以转化为一个凸二次规划求解的问题。

对于二分类学习,假设现在的数据是线性可分的,这时分类学习最基本的想法就是找到一个合适的超平面,该超平面能够将不同类别的样本分开,类似二维平面使用a x + b y + c = 0 来表示,超平面实际上表示的就是高维的平面。
对数据点进行划分时,易知:当超平面距离与它最近的数据点的间隔越大,分类的鲁棒性越好,即当新的数据点加入时,超平面对这些点的适应性最强,出错的可能性最小

最大间隔分类器的目标函数定义为

2、对偶问题

对于上述得到的目标函数,求1 / ||w|| 的最大值,将原来的目标函数转化为:

即变为了一个带约束的凸二次规划问题,可以使用现成的优化计算包(QP优化包)求解,但由于SVM的特殊性,一般我们将原问题变换为它的对偶问题,接着再对其对偶问题进行求解。

为什么通过对偶问题进行求解,有下面两个原因:

一是因为使用对偶问题更容易求解;
二是因为通过对偶问题求解出现了向量内积的形式,从而能更加自然地引出核函数。

3、 核函数

由于上述的超平面只能解决线性可分的问题,对于线性不可分的问题,例如:异或问题,我们需要使用核函数将其进行推广。

一般地,解决线性不可分问题时,常常采用映射的方式,将低维原始空间映射到高维特征空间,使得数据集在高维空间中变得线性可分,从而再使用线性学习器分类。

如果原始空间为有限维,即属性数有限,那么总是存在一个高维特征空间使得样本线性可分。若∅代表一个映射,则在特征空间中的划分函数变为:

求解的过程中,只涉及到了高维特征空间中的内积运算,由于特征空间的维数可能会非常大,例如:若原始空间为二维,映射后的特征空间为5维,若原始空间为三维,映射后的特征空间将是19维,之后甚至可能出现无穷维,根本无法进行内积运算了,此时便引出了核函数(Kernel)的概念。

因此,核函数可以直接计算隐式映射到高维特征空间后的向量内积,而不需要显式地写出映射后的结果,它虽然完成了将特征从低维到高维的转换,但最终却是在低维空间中完成向量内积计算,与高维特征空间中的计算等效(低维计算,高维表现),从而避免了直接在高维空间无法计算的问题。

因此,在线性不可分问题中,核函数的选择成了支持向量机的最大变数,若选择了不合适的核函数,则意味着将样本映射到了一个不合适的特征空间,则极可能导致性能不佳。

4、 软间隔与正则化

前面的讨论中,我们主要解决了两个问题:当数据线性可分时,直接使用最大间隔的超平面划分;当数据线性不可分时,则通过核函数将数据映射到高维特征空间,使之线性可分。

我们需要允许某一些数据点不满足约束,即可以在一定程度上偏移超平面,同时使得不满足约束的数据点尽可能少,这便引出了软间隔支持向量机的概念

具体来说,前面介绍的支持向量机形式是要求所有样本均满足约束,即所有样本都必须划分正确,这称为硬间隔(hard margin),而软间隔则是允许某些样本不满足约束, 同时又使得不满足约束的样本尽可能少。

5、 支持向量回归

对于支持向量回归问题(XVR),容忍ϵ的偏差,即构建了宽度为2ϵ 的间隔带,在此中被认为预测正确。

6、 核方法

发现:SVM,SVR都可表示成核函数的线性组合。
一般结论:

即优化问题都可以表示为核函数的线性组合。基于核函数的学习方法称为“核方法”,
常见:通过引入核函数将线性学习器拓展为非线性学习器。

7、参考文献

《机器学习》周志华

posted @ 2022-07-03 09:52  朝南烟  阅读(228)  评论(0编辑  收藏  举报
body { color: #000; background-color: #e6e6e6; font-family: "Helvetica Neue",Helvetica,Verdana,Arial,sans-serif; font-size: 12px; min-height: 101%; background: url(https://images.cnblogs.com/cnblogs_com/caolanying/1841633/o_2009041…ly1geq8oc9owbj21hc0u0th5.jpg) fixed; } #home { margin: 0 auto; opacity: 0.8; width: 65%; min-width: 1080px; background-color: #fff; padding: 30px; margin-top: 50px; margin-bottom: 50px; box-shadow: 0 2px 6px rgba(100, 100, 100, 0.3); }