写在前面:看了又忘,忘了又看的支持向量机。。总结一下大概有两个原因,一个是还没有真正掌握SVM的细节原理,二是没有将其用于实践。。但是还是想要在这里记录一下,以供下一次想看的时候可以直接切入SVM的核心问题。
SVM的基本概念和间隔的定义
1. SVM的基本概念
SVM是一种处理二分类任务的分类模型。
其基本思想是基于训练集D,找到一个划分超平面将不同类别的样本分开。
SVM模型的基本定义是使距离超平面距离最近的不同类别样本点之间的距离最大。间隔最大使他有别于感知机。
SVM的学习策略是间隔最大化,可以形式化为求解凸二次规划问题。
2. SVM的分类
线性可分支持向量机:数据集线性可分,最大化“硬间隔”,学习得到一个SVM模型;
线性支持向量机:数据集大致线性可分(不能完全通过线性SVM分隔所有样本),最大化“软间隔”,学习得到一个SVM模型;
非线性支持向量机:数据集线性不可分,使用 kernel trick 和 软间隔最大化,学习得到一个SVM模型;
3. 函数间隔与几何间隔
函数间隔
超平面确定之后,可以表示样本x到超平面的距离,可以通过 y 和 的符号是否一致来判断是否分类正确。因此引出了函数间隔为
定义1:超平面(w,b)关于数据集T的函数间隔定义为,T中所有样本点(xi,yi)到超平面(w,b)函数间隔的最小值。即
函数间隔存在的问题:函数间隔不适合用来最大化间隔值,因为同等倍数地增加w,b的值,例如w,b成倍增加变为2w,2b,超平面并未发生改变,但此时函数间隔变为原来的两倍。因此,函数间隔可以在超平面不变时取得任意大的值,这对于最大化间隔值而言没有任何意义。
几何间隔
正是由于函数间隔有这样的缺陷,我们必须找到一个真正能反应样本点到超平面距离的一个度量方式。几何间隔由此产生。
为了方便记忆,几何距离可以认为是从平面几何图形中推导出来的距离,如下图:
w为垂直于超平面的法向量,因此单位法向量=. x0在超平面上,因此满足。现在知道x,那么,代入超平面公式得到,。最后得到,几何间隔为
定义2:超平面(w,b)关于数据集T的几何间隔定义为,T中所有样本点(xi,yi)到超平面(w,b)几何间隔的最小值。即
几何间隔的好处:几何间隔在函数间隔基础上除以,使得在w,b成倍缩放的时候,不会因此而改变,几何间隔只会随着超平面的变动而变动。因此它是能真正反映样本到超平面距离的间隔。
最大间隔分类器(模型的定义)
目标函数:max
约束条件:
因为函数间隔的定义是所有样本点到超平面的函数间隔的最小值。
由于函数间隔 可以随着w,b的缩放而变化,但是不影响超平面的位置,因此,为了后面方便优化,可以令 ,优化目标就变成了.使约束条件取等号的样本点就是支持向量,它们是距离超平面最近的点。如下图所示:
优化目标的其他形式
将max问题转为min问题:SVM的基本模型
优化目标是二次的,约束条件是线性的,因此这是一个凸二次规划问题。解决办法:采用拉格朗日乘子算法得到其“对偶问题”,通过求解对偶问题的解得到原始问题的最优解。具体而言,拉格朗日乘子法是将每条约束条件乘以一个拉格朗日乘子,并将约束条件融合到目标函数中。该优化问题的拉格朗日函数为:
(L中到底是+还是-,后面到底是 减一 还是一减,为方便记忆可以记住是减去一个正数(因为))
最让人头大的最小-最大以及最大-最小问题来了!!!
令
有两种情况:① 所有约束条件都满足的时候,即对所有样本都成立,此时;
② 当有一个约束条件不满足时,即某个,此时令,那么
为了保证求得原问题的最小值,所有约束条件必须满足并且;此时最小化等价于最小化。如果约束条件不能全部得到满足,那么,就不是我们最初要优化的目标了。具体写出来就是
——最小-最大
p*是该问题的最优值,且和原始问题等价,但这个问题不好直接求解,因为要直接求解w,b参数,α又不是等式约束,所以转换为该问题的对偶问题:
——最大-最小
d*是新问题的最优值,且d* <= p*.在满足某些条件的情况下,这两者相等,这个时候就可以通过求解对偶问题最优值d* 来间接地求解原始问题最优值p*。这里可以参考博文:简易解说拉格朗日对偶
综上所述:将原问题转化为对偶问题的原因有两个,一是d* 是p* 的近似解,二是转化为对偶问题之后更容易求解。此时可以先求L对w,b的极小,再求对α的极大。
KKT条件
KKT条件的意义:对于一般任意问题而言,KKT条件是使一组解成为最优解的必要条件,当原问题是凸问题的时候,KKT条件也是充分条件。意思是:当一组解为最优解时,这组解一定满足KKT条件;但满足KKT条件的解不一定是最优解;当问题是凸优化问题并且找到一组解满足KKT条件,那么这组解一定是最优解!我们的SVM问题是一个典型的凸二次规划问题,因此只要找到一组满足KKT条件的解就等价于找到了最优解。
根据上面的结果,我们得到原始问题和对偶问题分别是:
原始问题:
对偶问题:
且原始问题和对偶问题最优值的关系为:d* ≤ p* (具体证明见 简易解说拉格朗日对偶)
当两个问题的最优值相等时,求解得到的w,b,α就是原问题的最优解对应的参数。在一定条件下,d* == p* 成立,这个条件即 KKT条件。KKT条件的一般形式:
现有优化目标:
c(x)是不等式约束;h(x)是等式约束;
针对该问题的拉格朗日函数L为:
原始问题和对偶问题分别为:
原始问题和对偶问题最优值相等必须满足KKT条件:
①
②
③
④
⑤
⑥
第一个条件是拉格朗日函数取极值时的必要条件;②、⑤是拉格朗日乘子在不等式和等式约束下的条件;③ 是互补松弛条件;④、⑥ 是原始问题的约束条件。
现在对应到我们上面的SVM实际例子中,
L对 w,b都可导-------条件1满足; ------条件2满足;将中间的负号放到求和符号里面去,得到,根据约束条件可知,-------条件3,4可以满足;所以上面的原始问题通过满足KKT条件,转为对偶问题,现在求解对偶问题的最优值对应的参数,即为原始问题对应的最优值参数。
对偶问题的求解
主要分为三步:
① 固定 ,使 L 关于w,b最小化(此时w,b为变量);
② 求关于 的 L 的极大值(此时为变量);
③ 使用SMO算法求得拉格朗日乘子,从而求得w,b
① 求L 对w,b的偏导=0:
将w 代入 L:
具体推导公式需要用到:,(a+b+c+....)(a+b+c+....)=aa+ab+ac+....+ba+bb+bc+....,
② 求对α的极大,此时优化目标和约束条件为:
③ 采用SMO算法求解拉格朗日算子α,最终得到,
SMO算法参考https://blog.csdn.net/v_july_v/article/details/7624837#commentsedit
线性不可分SVM以及核函数
支持向量(support vector):
得到超平面(hyper plane) 之后,当有新的数据点x需要分类时,只需要将x代入f(x),判断它的符号即可。具体计算公式如下:
关键点:內积<xi,x>。但是我们并不需要计算所有训练样本xi与测试样本x的內积,因为, 对于非支持向量, = 0。解释一下原因:直观上讲,这些非支持向量离超平面较远,对于超平面的确定没有任何影响。由于分类完全由超平面决定,所以无关点并不需要参与计算。从margin和优化目标角度来讲,
max
非支持向量点的函数间隔 >1,即,而 ,为了使 L 最大,;
而对于支持向量来说,函数间隔=1,,不论取何值,L已经达到最大; 因此,若 ,则,所对应的样本点位于最大间隔边界上,是一个支持向量。
核函数(kernel)
接下来要引入核函数的概念,核函数的引入得益于上面对偶问题的求解,因此采用对偶问题求解SVM优化问题有两个好处:
①对偶问题更容易求解;② 可以引入核函数,将线性可分SVM推广到非线性可分SVM
当数据线性不可分时,上面求解的超平面不存在。怎么办呢?基本思路:要用线性分类器去学习非线性关系,需要选择一个非线性特征集,将数据写成新的形式,相当于使用一种映射,将数据映射到新的特征空间,再用线性分类器去学习。
因此,SVM的基本模型转变为:
:输入空间x -> 特征空间F的映射,然后再在F空间中使用线性分类器进行分类。
决策时,类比线性可分SVM,计算规则为:
此处的內积是样本x映射到特征空间之后的內积,由于特征空间维数可能很高,甚至可能是无穷维,因此直接计算这个內积很困难。【如果有一种方式可以在特征空间中直接计算内积〈φ(xi · φ(x)〉,就像在原始输入点的函数中一样,就有可能将两个步骤融合到一起建立一个非线性的学习器,就可以避开直接计算高维空间內积的障碍,这样直接计算的方法称为核函数方法:】
核是一个函数k,对于x,z,
核函数简单例子-便于理解
二维平面用坐标X1,X2表示,该平面上有一组非线性可分的点如下图:
SVM针对非线性可分的情况是找到一个映射,将二维数据映射到更高维空间。一条二次曲线可以写作:
如果定义一个二维到五维的映射:
则二次曲线方程可以重写为:
这恰好是一个超平面方程,在这个五维空间中,数据将变得线性可分。
根据上面对偶问题,映射过后的优化目标变成了:
假设有数据 ,,则 ,, -----①
上面的方法是先将原始空间中的特征向量进行映射,然后再做內积运算;然而这个映射函数不是那么容易找到的,并且映射过后的维度可能非常大。
观察发现: -----②
②式右半部分和①式右半部分形式很相似,只是在某些维度上进行了坐标伸缩,若令:
,则
②式仅仅在原始特征空间上进行內积运算,再进行简单的平方运算就可以得到和之前①式相同的结果,但②式的计算复杂程度远远低于①式。若令,这就是我们需要的核函数。
常用的核函数
1. 线性核:
就是原始空间中的內积;当使用线性核函数时代表原始空间中的数据线性可分。本可以不用核函数的,但是为了使线性SVM和非线性SVM一致对应,统一使用核函数表示內积,因此才有了这个线性核函数。
2. 多项式核:
上面的例子就是多项式核 R=1,d=2时的情况;使用多项式核对应的高维空间的维度是:,m是原始空间维度。
3. 高斯核
这个核就是最开始提到过的会将原始空间映射为无穷维空间的那个家伙。为高斯核的带宽,如果选得很大的话,高次特征上的权重实际上衰减得非常快,所以实际上(数值上近似一下)相当于一个低维的子空间;反过来,如果选得很小,则可以将任意的数据映射为线性可分——当然,这并不一定是好事,因为随之而来的可能是非常严重的过拟合问题。不过,总的来说,通过调控参数,高斯核实际上具有相当高的灵活性,也是使用最广泛的核函数之一。-----(by JULY)
径向基函数:Radial Basis Function 简称 RBF,就是某种沿径向对称的标量函数。 通常定义为空间中任一点x到某一中心xc之间欧氏距离的单调函数 ,可记作 k(||x-xc||), 其作用往往是局部的 , 即当x远离xc时函数取值很小;最常用的径向基函数就是高斯核函数,形式为 k(||x-xc||)=exp{- ||x-xc||^2/(2*σ^2) } 其中x_c为核函数中心,σ为函数的宽度参数 , 控制了函数的径向作用范围。如果x和x_c很相近那么核函数值为1,如果x和x_c相差很大那么核函数值约等于0。
σ设置较小:高斯核函数“又高又瘦”,会造成只会作用于支持向量样本附近,对于未知样本分类效果很差,存在训练准确率可以很高而测试准确率不高的可能;
σ设置较大:高斯核函数“又扁又平”,造成平滑效应太大,无法在训练集上得到特别高的准确率,也会影响测试集的准确率;
所以σ参数非常重要。
西瓜书上还有拉普拉斯核以及sigmoid核。P128
核函数总结
1. 当原始特征空间中的数据集线性不可分时,可以将原始空间映射到高维空间中,再用线性分类器学习;
2. 映射过后,原始对偶问题中将会出现內积形式,映射后的空间维度可能非常大,因此计算量也会非常大;
3. 核函数的作用是什么呢?就是使 ,它等价于将原始空间转换到高维空间,但是只在原始空间中进行计算,但实质分类效果却表现在高维空间中,大大降低了计算复杂度。
软间隔&正则化
为什么有软间隔这个东东?简单来讲就是,前面讨论的内容都是假设训练样本在特征空间中线性可分,超平面能将所有样本都正确分类,所有样本都满足约束:(硬间隔,hard margin);但实际生活中的分类问题很难找到合适的核函数使得样本在特征空间中线性可分,或者即使找到了一个可以将数据完全分开的超平面,也很难断定这个线性可分的结果不是由于过拟合造成的。
如图所示,数据样本中可能存在很多噪声,有的数据点偏离正常位置很远,即离群点(异常值)outlier,为了将所有数据正确分类,超平面最终为黑色虚线。如果将outlier删除,最终的分类平面为红色实线,直观上看,红色实线超平面比黑色虚线分类面要好。SVM超平面本身只由少数几个支持向量决定,如果支持向量中包含outlier,那么这个超平面将受到outlier的极大影响。
因此,软间隔化的基本思想是:允许支持向量机在一些样本上出错,即允许某些样本不满足约束;约束条件为
其中 称为松弛变量(slack variable),它表示outlier与函数间隔 的偏离距离。 如果任意大,那么任意一个超平面,所有样本都满足这个约束,这显然是不行的。因此对 也要有一定的约束,即 ,那么SVM基本模型就变成了:
上面的优化目标就是“软间隔支持向量机”。
C是一个事先确定好的常量,用于控制目标函数中两项之间的权重(1.寻找最大间隔;2.样本点偏差量最小);极端情况下,C无穷大时,要求,即所有样本均需满足约束;当C为常量时,允许部分样本不满足约束。
软间隔下的对偶问题
将软间隔支持向量机的优化目标表示成拉格朗日函数形式:
①
求解参数过程与之前一样,求对偶问题。注意求的是L对 w, b, 的最小,L对的最大。
将上面三个式子代回①式,得到:
上面的优化问题就是软间隔下对偶问题。很神奇对不对! 和 r 都不在了,与硬间隔下的对偶问题唯一区别就是由于,并且,所以, 。一张图总结:
软间隔下的KKT条件
与硬间隔类似,软间隔下的对偶问题最优值与原始问题最优值相等,必须满足KKT条件:
-----------①
-------------②
---------③
--------④
----------⑤
--------⑥
可以看出,我们的原始问题都满足KKT条件,所以对偶问题求出来的最优值就是原始问题的最优值。
梳理一下拉格朗日乘子的取值以及样本点分类情况:
① -----------该样本对决策平面没有任何影响
②------------,该样本点为支持向量(离群点和错分样本点都是支持向量)
③-----------------样本点在最大间隔边界上
④.1 且 ------------------,样本点被正确分类,落在超平面和最大边界之间;
④.2 且 -------------------------,样本点被错误分类。
④.3 且 -------------------------,样本点在超平面上。
由此可知,软间隔支持向量机的决策平面仍然只与支持向量有关,即通过采用hinge损失函数仍然保持了稀疏性。(所谓的稀疏性就是指许多样本点的,使得决策平面只与少数支持向量有关),这也是hinge损失函数的好处。
正则化
西瓜书P133提到了SVM的更一般化形式:
第一项用于描述划分超平面的间隔大小;第二项用于描述训练集上的误差。
称为“结构风险”,用于描述f某些性质,表示我们希望模型具有何种性质(例如希望获得负责度更小的模型);也就是正则化项,用于降低经验风险最小化时的过拟合风险。
称为“经验风险”,用于描述模型与训练数据的契合程度(损失函数就是干这个的);
C是正则化常数,用于对二者进行折中。
SVM的损失函数
软间隔SVM,西瓜书中(P130)提到了替代损失函数这一概念,在此添加一点记录。
软间隔就是允许部分样本不满足约束条件,但是不满足约束条件的样本要越少越好,所以优化目标可以写作:
①
这就是0/1损失函数,当样本满足约束条件时,z≥0,l=0;否则 l=1。
但是由于损失函数非凸,非连续,数学性质不好(可以想象一下的函数形状),使得①式不好求解,所以通常用其他的损失函数来替代函数,称为“替代损失”。替代损失函数一般具有较好的数学性质,比如是凸函数且是连续的。常用的替代损失函数有:
hinge损失:
指数损失:
对率损失:
软间隔SVM通常采用的是hinge损失,所以①式可以转化为:
②
由此引入松弛变量 ,②式重写为:
③
④
⑤
为什么可以重写为这样呢?看③-⑤是否与②等价。
④、⑤式,可以写作:,也就是说 的下限为 或者 0;而为了使③式最小化, 会取得它的下限。所以当时, 会取;而当时,会取0.这与②式完全等价。
所以最上面的软间隔SVM讨论一开始就给出了③-⑤式的形式,实际上暗藏了:软间隔SVM使用hinge损失函数这个性质。
SVM简单小结
1. SVM主要用于处理分类问题 模型为一个超平面 寻找最大几何间隔 转化为凸优化问题
转化为拉格朗日对偶问题求解参数 转为求解拉格朗日乘子 采用高效的SMO算法求解
2. 线性不可分时,引入核函数,核函数的妙处在于,只需要在原始特征空间中进行计算,但最终的分类效果却可以表现在高维空间中;大大减小了计算量;
3. 软间隔SVM允许部分样本分类错误;其中涉及到hinge损失函数以及松弛变量 ;计算方法与硬间隔SVM一样。支持向量包括在最大间隔边界上的点以及分类错误的点,意思是只有这些样本点对超平面才有影响。
SVM与LR的区别与联系
联系:
① 都是用于处理分类问题,且以线性模型为基础;
② 但是如果对原始特征空间做高维映射,模型对参数w仍然是线性的,但可以解决非线性问题。所以逻辑回归和SVM一样,采用kernel trick 都可以处理非线性问题。
区别:
① 损失函数不同,逻辑回归采用的是对数损失函数,SVM(软间隔时)采用hinge损失函数;但是这两种损失函数都是增大对分类平面影响较大的样本点的权重,减小与分类关系较小样本点的权重。只不过SVM只考虑少数样本点——支持向量,而逻辑回归则是减小离分类平面较远的点的权重。
② 损失函数的优化方法不同,逻辑回归采用梯度下降法,SVM采用SMO算法;
③ 逻辑回归考虑所有点,预测开销更大;而SVM只考虑部分点,得到的解具有稀疏性;
④ 逻辑回归在预测类别的同时给出了概率;而SVM不具有概率意义(经过特殊处理可以得到);
sklearn中SVM的几个重要参数
sklearn.svm.SVC ()
1. C(default=1.0):错分样本的惩罚参数,默认为1;也就是上面叙述中软间隔SVM优化目标中的C。
2. class_weight :{dict, ‘balanced’}:
1)dict{0:x1,1:x2}自定义错分样本惩罚系数,将C设置为class_weight[0]*x1,class_weight[1]*x2(通过设置这个就可以实现代价敏感学习模型,即0类错分为1类的代价为x1,1类错分为0类的代价为x2.若1类为少数类,则应该设置x2>x1)
2)balanced:自适应,将C设为 n_samples / (n_classes * np.bincount(y)), y={0,1},所以bincount(y)就是 0,1类的各自的数量
3)none(默认):C=1
3. kernel:‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’;核函数,默认为‘rbf’
4. degree:多项式核的阶数;
5. gamma:‘rbf’, ‘poly’ and ‘sigmoid’ 核函数的系数;默认是 gamma = 1 / n_features,gamma和σ的关系:
6. shrinking:是否进行启发式
7. probability:以概率形式输出,若为False,则预测值以0,1标签形式输出。
参考:
https://blog.csdn.net/v_july_v/article/details/7624837#commentsedit
https://blog.csdn.net/TaoTaoFu/article/details/56843224
https://www.cnblogs.com/90zeng/p/Lagrange_duality.html
感谢。