SVM(未完SMO)

svm

给定训练样本集D=(x1,y1),(x2,y2),…,(xm,ym))),yi∈{−1,1} 线性分类器基于训练样本D 在二维空间中找到一个超平面来分开二类样本。

在这里插入图片描述
这根红色线代表的超平面抗“扰动”性最好。这个超平面离直线两边的数据的间隔最大,对训练集的数据的局限性或噪声有最大的“容忍”能力。

超平面用函数f(x)=wTx+b表示。f(x) 大于0的点对应 y=1 的数据点,f(x) f(x)f(x) 小于0的点对应y=-1的点。

在这里插入图片描述
r = |wTx + b|为函数间隔,下面两个都为几何间隔:
在这里插入图片描述在这里插入图片描述
令函数间隔等于1,则有 r = 1 / ||w||,则|wTx+b| ≥1,即:

在这里插入图片描述
距离超平面最近的几个训练样本被称为支持向量,两个异类支持向量到超平面的距离之和(也称为“间隔”)可表示为:
在这里插入图片描述
在这里插入图片描述
等价于:
在这里插入图片描述
更好优化,因为现在的目标函数是二次的,约束条件是线性的,所以它是一个凸二次规划问题。平方让函数更加平滑。
我们可以看到,上面的基本型目标函数是二次的,约束条件是线性的,这是一个凸二次规划问题。可以直接用现成的优化计算包求解。但若利用“对偶问题”来求解,会更高效。

  1. 对偶问题将原始问题中的约束转为了对偶问题中的等式约束
  2. 方便核函数的引入
  3. 改变了问题的复杂度。由求特征向量w转化为求比例系数a,在原始问题下,求解的复杂度与样本的维度有关,即w的维度。在对偶问题下,只与样本数量有关。
  4. 求解更高效,因为只用求解比例系数a,而比例系数a只有支持向量才为非0,其他全为0.

对偶问题求解步骤

在这里插入图片描述

首先固定α,要让 L 关于 w 和 b 最小化,我们分别对w,b求偏导数,即令 ∂L/∂w 和 ∂L/∂b 等于零
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以利用SMO算法求解对偶问题中的拉格朗日乘子αi

核函数Kernel

前面的推导中我们得到

在这里插入图片描述
因此分类函数为:
在这里插入图片描述
对于新点 x的预测,只需要计算它与训练数据点的内积即可(表示向量内积),这一点至关重要,是之后使用 Kernel 进行非线性推广的基本前提。此外,所谓 Supporting Vector 也在这里显示出来——事实上,所有非Supporting Vector 所对应的系数α都是等于零的,因此对于新点的内积计算实际上只要针对少量的“支持向量”而不是所有的训练数据即可。
因为对于目标函数:
在这里插入图片描述
注意到如果 xi 是支持向量的话,上式中红颜色的部分是等于 0 的(因为支持向量的 functional margin 等于 1 ),而对于非支持向量来说,functional margin 会大于 1 ,因此红颜色部分是大于零的,而又是非负的,为了满足最大化,必须等于 0 。这也就是这些非Supporting Vector 的点的局限性。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
避开了直接在高维空间中进行计算,而结果却是等价的。

几个核函数

核函数有严格的数学要求,所以设计一个核函数是很困难的。K(x,z)是正定核的充要条件是:K(x,z)对应的Gram矩阵实半正定矩阵。 
Gram矩阵:矩阵对应点的内积。KTK, KKT 
半正定矩阵:设A是实对称矩阵。如果对任意的实非零列矩阵X有XTAX≥0,就称A为半正定矩阵。 
当检验一个K是否为正定核函数,要对任意有限输入集{xi…}验证K对应的Gram矩阵实是否为半正定矩阵。

多项式核,刚才我们举的例子是这里多项式核的一个特例(r = 1,d = 2)。
在这里插入图片描述
高斯核,这个核就是最开始提到过的会将原始空间映射为无穷维空间的那个家伙。不过,如果选得很大的话,高次特征上的权重实际上衰减得非常快,所以实际上(数值上近似一下)相当于一个低维的子空间;反过来,如果选得很小,则可以将任意的数据映射为线性可分——当然,这并不一定是好事,因为随之而来的可能是非常严重的过拟合问题。不过,总的来说,通过调控参数,高斯核实际上具有相当高的灵活性,也是使用最广泛的核函数之一。
在这里插入图片描述
拉普拉斯核:
sigmoid核:

松弛变量
在这里插入图片描述
在有松弛的情况下outline点也属于支持向量,对于不同的支持向量,拉格朗日参数的值也不同,对于远离分类平面的点α为0;对于边缘上的点α在[0, 1/L]之间,其中,L为训练数据集个数,即数据集大小;对于outline数据和内部的数据α为1/L。

原来的约束条件为:
在这里插入图片描述
考虑到outlier问题,约束条件变成:
在这里插入图片描述
其中 ε 称为松弛变量 (slack variable),角标 i 为对应数据点允许偏离的 functional margin 的量。当然,如果 ε 任意大的话,那任意的超平面都是符合条件的了。所以,需要在原来的目标函数后面加上一项,使得这些的总和也要最小:
在这里插入图片描述
其中 C 是一个参数,用于控制目标函数中两项(“寻找 margin 最大的超平面”和“保证数据点偏差量最小”)之间的权重。注意,其中 ε 是需要优化的变量(之一),而 C 是一个事先确定好的常量。完整地写出来是这个样子:
在这里插入图片描述
用之前的方法将限制或约束条件加入到目标函数中,得到新的拉格朗日函数,如下所示:
在这里插入图片描述
先让L针对 w、b 和 ε 最小化:
在这里插入图片描述
将 w 带回 L 并化简,得到和原来一样的目标函数:
在这里插入图片描述
在这里插入图片描述
可以看到唯一的区别就是现在 dual variable (对偶变量) α多了一个上限 C 。

对于LR与SVM的异同:

相同:

LR和SVM都是分类算法
LR和SVM都是监督学习算法。
LR和SVM都是判别模型。
如果不考虑核函数,LR和SVM都是线性分类算法,也就是说他们的分类决策面都是线性的。
说明:LR也是可以用核函数的.但LR通常不采用核函数的方法.(计算量太大)

不同:
LR采用log损失,SVM采用合页(hinge)损失
逻辑回归方法基于概率理论,假设样本为1的概率可以用sigmoid函数来表示,然后通过极大似然估计的方法估计出参数的值(基于统计的,其损失函数是人为设定的凸函数) 。支持向量机​基于几何间隔最大化原理,认为存在最大几何间隔的分类面为最优分类面.(有严格的推导)
LR对异常值敏感,SVM对异常值不敏感(抗燥能力,SVM要强)
支持向量机只考虑局部的边界线附近的点,而逻辑回归考虑全局(远离的点对边界线的确定也起作用,虽然作用会相对小一些)。LR模型找到的那个超平面,是尽量让所有点都远离他,而SVM寻找的那个超平面,是只让最靠近中间分割线的那些点尽量远离,即只用到那些支持向量的样本。支持向量机改变非支持向量样本并不会引起决策面的变化,逻辑回归中改变任何样本都会引起决策面的。LR则受所有数据点的影响,如果数据不同类别strongly unbalance,一般需要先对数据做balancing。
计算复杂度不同。对于海量数据,SVM的效率较低,LR效率比较高。
当样本较少,特征维数较低时,SVM和LR的运行时间均比较短,SVM较短一些。准确率的话,LR明显比SVM要高。当样本稍微增加些时,SVM运行时间开始增长,但是准确率赶超了LR。SVM时间虽长,但在接收范围内。当数据量增长到20000时,特征维数增长到200时,SVM的运行时间剧烈增加,远远超过了LR的运行时间。但是准确率却和LR相差无几。(这其中主要原因是大量非支持向量参与计算,造成SVM的二次规划问题)
对非线性问题的处理方式不同,LR主要靠特征构造,必须组合交叉特征,特征离散化。SVM也可以这样,还可以通过kernel(因为只有支持向量参与核计算,计算复杂度不高)。(由于可以利用核函数,。SVM则可以通过对偶求解高效处理。LR则在特征空间维度很高时,表现较差。)
SVM的损失函数就自带正则!!!(损失函数中的1/2||w||^2项),这就是为什么SVM是结构风险最小化算法的原因!!!而LR必须另外在损失函数上添加正则项!!!

值得一提的是求解LR模型过程中,每一个数据点对分类平面都是有影响的,它的影响力远离它到分类平面的距离指数递减。换句话说,LR的解是受数据本身分布影响的。在实际应用中,如果数据维度很高,LR模型都会配合参数的L1 regularization。

要说有什么本质区别,那就是两个模型对数据和参数的敏感程度不同,Linear SVM比较依赖penalty的系数和数据表达空间的测度,而(带正则项的)LR比较依赖对参数做L1 regularization的系数。但是由于他们或多或少都是线性分类器,所以实际上对低维度数据overfitting的能力都比较有限,相比之下对高维度数据,LR的表现会更加稳定,为什么呢?
因为Linear SVM在计算margin有多“宽”的时候是依赖数据表达上的距离测度(可以理解为度量标准,即在什么样的标准上计算gap的大小)的,换句话说如果这个测度不好(badly scaled,这种情况在高维数据尤为显著),所求得的所谓Large margin就没有意义了,这个问题即使换用kernel trick(比如用Gaussian kernel)也无法完全避免。所以使用Linear SVM之前一般都需要先对数据做normalization,(这里的normalization是对数据的归一化,注意区分之前的LR在类别不平衡的时候做的balancing)而求解LR(without regularization)时则不需要或者结果不敏感。
同时会有:feature scaling会使得gradient descent的收敛更好。
如果不归一化,各维特征的跨度差距很大,目标函数就会是“扁”的:
在这里插入图片描述
(图中椭圆表示目标函数的等高线,两个坐标轴代表两个特征)
这样feature scaling之后,在进行梯度下降的时候,梯度的方向就会偏离最小值的方向,走很多弯路。
如果归一化了,那么目标函数就“圆”了:
在这里插入图片描述
每一步梯度的方向都基本指向最小值,可以大踏步地前进。

感知机

感知机(perceptron)是二分类的线性分类模型,属于监督学习算法。

由输入空间到输出空间的函数为:
在这里插入图片描述
学习策略

对于损失函数的选择,我们采用的是误分类点到超平面的距离(几何间距),其中||w||是L2范数:
在这里插入图片描述
对于误分类点(xi,yi)来说,yi = +1 或 yi = -1:
在这里插入图片描述
误分类点到超平面的距离为:
在这里插入图片描述
那么,所有误分类点到超平面的总距离为:
在这里插入图片描述
**1/|w|这个因子在这儿可以不用考虑,因为它对结果的影响与w,b是等效的,因此只用单独考虑w,b就可以,这样可以减小运算复杂度。**损失函数:
在这里插入图片描述
最优化的方法是随机梯度下降法:
首先,任选一个超平面w0和b0,然后使用梯度下降法不断地极小化目标函数,极小化过程不是一次使M中所有误分类点的梯度下降,而是一次随机的选取一个误分类点使其梯度下降。
在这里插入图片描述
在这里插入图片描述
然后,随机选取一个误分类点,根据上面的规则,计算新的w,b,然后进行更新:
在这里插入图片描述
通过迭代可以期待损失函数L(w,b)不断减小,直至为0。

感知机参考:https://blog.csdn.net/Dream_angel_Z/article/details/48915561
支持向量机参考:https://blog.csdn.net/v_JULY_v/article/details/7624837
支持向量机参考:https://blog.csdn.net/b285795298/article/details/81977271

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值