支持向量机原理(一) 线性支持向量机

简介:

1. 回顾感知机模型

    在感知机原理小结中,我们讲到了感知机的分类原理,感知机的模型就是尝试找到一条直线,能够把二元数据隔离开。放到三维空间或者更高维的空间,感知机的模型就是尝试找到一个超平面,能够把所有的二元类别隔离开。对于这个分离的超平面,我们定义为 w T x + b = 0 ,如下图。在超平面 w T x + b = 0 上方的我们定义为 y = 1 ,在超平面 w T x + b = 0 下方的我们定义为 y = 1 。可以看出满足这个条件的超平面并不止一个。那么我们可能会尝试思考,这么多的可以分类的超平面,哪个是最好的呢?或者说哪个是泛化能力最强的呢?

 

    接着我们看感知机模型的损失函数优化,它的思想是让所有误分类的点(定义为M)到超平面的距离和最小,即最小化下式:

x i M y ( i ) ( w T x ( i ) + b ) / | | w | | 2

    当 w b 成比例的增加,比如,当分子的 w b 扩大N倍时,分母的L2范数也会扩大N倍。也就是说,分子和分母有固定的倍数关系。那么我们可以固定分子或者分母为1,然后求另一个即分子自己或者分母的倒数的最小化作为损失函数,这样可以简化我们的损失函数。在感知机模型中,我们采用的是保留分子,固定分母 | | w | | 2 = 1 ,即最终感知机模型的损失函数为:

x i M y ( i ) ( w T x ( i ) + b )

    如果我们不是固定分母,改为固定分子,作为分类模型有没有改进呢?

    这些问题在我们引入SVM后会详细解释。

2. 函数间隔与几何间隔

    在正式介绍SVM的模型和损失函数之前,我们还需要先了解下函数间隔和几何间隔的知识。

    在分离超平面固定为 w T x + b = 0 的时候, | w T x + b | 表示点x到超平面的距离。通过观察 w T x + b 和y是否同号,我们判断分类是否正确,这些知识我们在感知机模型里都有讲到。这里我们引入函数间隔的概念,定义函数间隔 γ 为:

γ = y ( w T x + b )

    可以看到,它就是感知机模型里面的误分类点到超平面距离的分子。对于训练集中m个样本点对应的m个函数间隔的最小值,就是整个训练集的函数间隔。

    函数间隔并不能正常反应点到超平面的距离,在感知机模型里我们也提到,当分子成比例的增长时,分母也是成倍增长。为了统一度量,我们需要对法向量 w 加上约束条件,这样我们就得到了几何间隔 γ ,定义为:

γ = y ( w T x + b ) | | w | | 2 = γ | | w | | 2

    几何间隔才是点到超平面的真正距离,感知机模型里用到的距离就是几何距离。

3. 支持向量

    在感知机模型中,我们可以找到多个可以分类的超平面将数据分开,并且优化时希望所有的点都离超平面远。但是实际上离超平面很远的点已经被正确分类,我们让它离超平面更远并没有意义。反而我们最关心是那些离超平面很近的点,这些点很容易被误分类。如果我们可以让离超平面比较近的点尽可能的远离超平面,那么我们的分类效果会好有一些。SVM的思想起源正起于此。

    如下图所示,分离超平面为 w T x + b = 0 ,如果所有的样本不光可以被超平面分开,还和超平面保持一定的函数距离(下图函数距离为1),那么这样的分类超平面是比感知机的分类超平面优的。可以证明,这样的超平面只有一个。和超平面平行的保持一定的函数距离的这两个超平面对应的向量,我们定义为支持向量,如下图虚线所示。

    

     支持向量到超平面的距离为 1 / | | w | | 2 ,两个支持向量之间的距离为 2 / | | w | | 2

4. SVM模型目标函数与优化

    SVM的模型是让所有点到超平面的距离大于一定的距离,也就是所有的分类点要在各自类别的支持向量两边。用数学式子表示为:

m a x γ = y ( w T x + b ) | | w | | 2 s . t y i ( w T x i + b ) = γ ( i ) γ ( i = 1 , 2 , . . . m )

    一般我们都取函数间隔 γ 为1,这样我们的优化函数定义为:

m a x 1 | | w | | 2 s . t y i ( w T x i + b ) 1 ( i = 1 , 2 , . . . m )

    也就是说,我们要在约束条件 y i ( w T x i + b ) 1 ( i = 1 , 2 , . . . m ) 下,最大化 1 ) | | w | | 2 。可以看出,这个感知机的优化方式不同,感知机是固定分母优化分子,而SVM是固定分子优化分母,同时加上了支持向量的限制。

    由于 1 | | w | | 2 的最大化等同于 1 2 | | w | | 2 2 的最小化。这样SVM的优化函数等价于:

m i n 1 2 | | w | | 2 2 s . t y i ( w T x i + b ) 1 ( i = 1 , 2 , . . . m )

    由于目标函数 1 2 | | w | | 2 2 是凸函数,同时约束条件不等式是仿射的,根据凸优化理论,我们可以通过拉格朗日函数将我们的优化目标转化为无约束的优化函数,这和最大熵模型原理小结中讲到了目标函数的优化方法一样。具体的,优化函数转化为:

L ( w , b , α ) = 1 2 | | w | | 2 2 i = 1 m α i [ y i ( w T x i + b ) 1 ] α i 0

    由于引入了朗格朗日乘子,我们的优化目标变成:

m i n w , b m a x α i 0 L ( w , b , α )

    和最大熵模型一样的,我们的这个优化函数满足KKT条件,也就是说,我们可以通过拉格朗日对偶将我们的优化问题转化为等价的对偶问题来求解。如果对凸优化和拉格朗日对偶不熟悉,建议阅读鲍德的《凸优化》。

    也就是说,现在我们要求的是:

m a x α i 0 m i n w , b L ( w , b , α )

    从上式中,我们可以先求优化函数对于 w b 的极小值。接着再求拉格朗日乘子 α 的极大值。

    首先我们来求 w b 的极小值,即 m i n w , b L ( w , b , α ) 。这个极值我们可以通过对 w b 分别求偏导数得到:

L w = 0 w = i = 1 m α i y i x i
L b = 0 i = 1 m α i y i = 0

     从上两式子可以看出,我们已经求得了 w α 的关系,只要我们后面接着能够求出优化函数极大化对应的 α ,就可以求出我们的 w 了,至于b,由于上两式已经没有b,所以最后的b可以有多个。

    好了,既然我们已经求出 w α 的关系,就可以带入优化函数 L ( w , b , α ) 消去 w 了。我们定义:

ψ ( α ) = m i n w , b L ( w , b , α )

    现在我们来看将 w 替换为 α 的表达式以后的优化函数 ψ ( α ) 的表达式:

 

(1) ψ ( α ) = 1 2 | | w | | 2 2 i = 1 m α i [ y i ( w T x i + b ) 1 ] (2) = 1 2 w T w i = 1 m α i y i w T x i i = 1 m α i y i b + i = 1 m α i (3) = 1 2 w T i = 1 m α i y i x i i = 1 m α i y i w T x i i = 1 m α i y i b + i = 1 m α i (4) = 1 2 w T i = 1 m α i y i x i w T i = 1 m α i y i x i i = 1 m α i y i b + i = 1 m α i (5) = 1 2 w T i = 1 m α i y i x i i = 1 m α i y i b + i = 1 m α i (6) = 1 2 w T i = 1 m α i y i x i b i = 1 m α i y i + i = 1 m α i (7) = 1 2 ( i = 1 m α i y i x i ) T ( i = 1 m α i y i x i ) b i = 1 m α i y i + i = 1 m α i (8) = 1 2 i = 1 m α i y i x i T i = 1 m α i y i x i b i = 1 m α i y i + i = 1 m α i (9) = 1 2 i = 1 m α i y i x i T i = 1 m α i y i x i + i = 1 m α i (10) = 1 2 i = 1 , j = 1 m α i y i x i T α j y j x j + i = 1 m α i (11) = i = 1 m α i 1 2 i = 1 , j = 1 m α i α j y i y j x i T x j

    其中,(1)式到(2)式用到了范数的定义 | | w | | 2 2 = w T w , (2)式到(3)式用到了上面的 w = i = 1 m α i y i x i , (3)式到(4)式把和样本无关的 w T 提前,(4)式到(5)式合并了同类项,(5)式到(6)式把和样本无关的 b 提前,(6)式到(7)式继续用到 w = i = 1 m α i y i x i ,(7)式到(8)式用到了向量的转置。由于常量的转置是其本身,所有只有向量 x i 被转置,(8)式到(9)式用到了上面的 i = 1 m α i y i = 0 ,(9)式到(10)式使用了 ( a + b + c + ) ( a + b + c + ) = a a + a b + a c + b a + b b + b c + 的乘法运算法则,(10)式到(11)式仅仅是位置的调整。

    从上面可以看出,通过对 w , b 极小化以后,我们的优化函数 ψ ( α ) 仅仅只有 α 向量做参数。只要我们能够极大化 ψ ( α ) ,就可以求出此时对应的 α ,进而求出 w , b .

    对 ψ ( α ) 求极大化的数学表达式如下:

m a x α 1 2 i = 1 m j = 1 m α i α j y i y j ( x i x j ) + i = 1 m α i
s . t . i = 1 m α i y i = 0
α i 0 i = 1 , 2 , . . . m

    可以去掉负号,即为等价的极小化问题如下:

m i n α 1 2 i = 1 m j = 1 m α i α j y i y j ( x i x j ) i = 1 m α i
s . t . i = 1 m α i y i = 0
α i 0 i = 1 , 2 , . . . m

     只要我们可以求出上式极小化时对应的 α 向量就可以求出 w b 了。具体怎么极小化上式得到对应的 α ,一般需要用到SMO算法,这个算法比较复杂,我们后面会专门来讲。在这里,我们假设通过SMO算法,我们得到了对应的 α 的值 α

    那么我们根据 w = i = 1 m α i y i x i ,可以求出对应的 w 的值

w = i = 1 m α i y i x i

    求b则稍微麻烦一点。注意到,对于任意支持向量 ( x x , y s ) ,都有

y s ( w T x s + b ) = y s ( i = 1 S α i y i x i T x s + b ) = 1

    假设我们有S个支持向量,则对应我们求出S个 b ,理论上这些 b 都可以作为最终的结果, 但是我们一般采用一种更健壮的办法,即求出所有支持向量所对应的 b s ,然后将其平均值作为最后的结果。

    怎么得到支持向量呢?根据KKT条件中的对偶互补条件 α i ( y i ( w T x i + b ) 1 ) = 0 ,如果 α i > 0 则有 y i ( w T x i + b ) = 1  即点在支持向量上,否则如果 α i = 0 则有 y i ( w T x i + b ) 1 ,即样本在支持向量上或者已经被正确分类。

5. 线性可分SVM的算法过程

    这里我们对线性可分SVM的算法过程做一个总结。

    输入是线性可分的m个样本 ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) , ,其中x为n维特征向量。y为二元输出,值为1,或者-1.

    输出是分离超平面的参数 w b 和分类决策函数。

    算法过程如下:

    1)构造约束优化问题

m i n α 1 2 i = 1 m j = 1 m α i α j y i y j ( x i x j ) i = 1 m α i
s . t . i = 1 m α i y i = 0
α i 0 i = 1 , 2 , . . . m

    2)用SMO算法求出上式最小时对应的 α 向量的值 α 向量.

    3) 计算 w = i = 1 m α i y i x i

    4) 找出所有的S个支持向量,即满足 α s > 0 ( x s , y s ) ,通过  y s ( i = 1 S α i y i x i T x s + b ) = 1 ,计算出每个支持向量 ( x x , y s ) 对应的 b s ,计算出这些 b s = y s i = 1 S α i y i x i T x s . 所有的 b s 对应的平均值即为最终的 b = 1 S i = 1 S b s

     这样最终的分类超平面为: w x + b = 0 ,最终的分类决策函数为: f ( x ) = s i g n ( w x + b )

    

    线性可分SVM的学习方法对于非线性的数据集是没有办法使用的, 有时候不能线性可分的原因是线性数据集里面多了少量的异常点,由于这些异常点导致了数据集不能线性可分, 那么怎么可以处理这些异常点使数据集依然可以用线性可分的思想呢? 我们在下一节的线性SVM的软间隔最大化里继续讲。


本文转自刘建平Pinard博客园博客,原文链接:http://www.cnblogs.com/pinard/p/6097604.html,如需转载请自行联系原作者


相关文章
|
6月前
|
机器学习/深度学习 存储 缓存
支持向量机算法
支持向量机算法
89 2
|
6月前
|
机器学习/深度学习 算法
支持向量机(SVM): 从理论到实践的指南(1)
SVM专注于为二分类问题找到最佳决策边界,即超平面,该平面能最大化两类数据之间的空隙或间隔。线性SVM假设用一个直线(或高维空间中的超平面)足以有效地分隔数据。当遇到重叠或杂乱无章散布的数据时,软间隔SVM允许某些点位于错误的边界一侧,这通过引入松弛变量与罚项系数C来实现,从而提供一个稳健的平衡方案。
|
6月前
|
机器学习/深度学习 算法
支持向量机(SVM): 从理论到实践的指南(2)
葡萄酒数据集经常被用于机器学习、模式识别和统计分类算法的测试中。由于其特征维度较高,非常适合于验证特征选择和降维方法,例如主成分分析(PCA)或线性判别分析(LDA)的效果。同时,由于数据集包含多个分类,它也经常被用作分类算法(如决策树、随机森林、支持向量机等)的标准测试集。
|
机器学习/深度学习 数据采集 算法
支持向量机SVM:从数学原理到实际应用
支持向量机SVM:从数学原理到实际应用
625 0
|
机器学习/深度学习 传感器 算法
【lssvm回归预测】基于鸽群算法优化最小二乘支持向量机PIO-lssvm实现数据回归预测附matlab代码
【lssvm回归预测】基于鸽群算法优化最小二乘支持向量机PIO-lssvm实现数据回归预测附matlab代码
|
机器学习/深度学习 传感器 人工智能
【lssvm回归预测】基于萤火虫算法优化最小二乘支持向量机lssvm实现数据回归预测附matlab代码
【lssvm回归预测】基于萤火虫算法优化最小二乘支持向量机lssvm实现数据回归预测附matlab代码
|
机器学习/深度学习 算法
SVM(一):线性支持向量机
SVM(一):线性支持向量机
SVM(一):线性支持向量机
|
机器学习/深度学习
SVM(三):非线性支持向量机
SVM(三):非线性支持向量机
SVM(三):非线性支持向量机
|
机器学习/深度学习 传感器 算法
【回归预测-lssvm】基于粒子群算法优化最小二乘支持向量机lssvm实现数据回归预测附matlab代码
【回归预测-lssvm】基于粒子群算法优化最小二乘支持向量机lssvm实现数据回归预测附matlab代码
|
机器学习/深度学习 算法 安全
深入浅出机器学习技法(一):线性支持向量机(LSVM)
机器学习技法是机器学习基石的提升,在此系列中我们将讨论各类机器学习典型算法,包括支持向量机、决策树、随机森林、GBDT等等。
549 0
深入浅出机器学习技法(一):线性支持向量机(LSVM)
下一篇
DataWorks