机器学习算法--支持向量机SVM

支持向量机是一种分类学习方法。

给定训练集D={(x1,y1),(x2,y2),....(xm,ym)}  yi={-1,+1}.分类的基本思想是找到一个线性超平面将不同类别的样本划分开。

线性超平面的选择多种多样,直觉应该选择最中间的划分方式,这种情况下对于训练样本的局部扰动容忍性最好,即对未见示例的泛化能力最强。

1.间隔,支持向量

线性超平面的方程:

空点中一点到平面的距离为:

有:        即  

若超平面能将样本正确分类,即对于任意(xi,yi)应满足wxi+b>0  yi=1   wxi+b<0  yi=-1  ,令

这里距离取值为1为了便于计算,对于最后结果并无影响。

由以上可知,距离超平面最近的几个点使上式等号成立,这些点成为支持向量,两个异类支持向量到超平面的距离之和为间隔:

优化目标为:使得最大间隔最大

即:   SVM的基本型

2.对偶问题

求解以上SVM基本型可以通过转化为对偶问题来解决,利用拉格朗日乘数法:

对于L分别对于w,b求导等于0,有:

代入得:

      

以上便是SVM的对偶问题形式。

若求得w,b  最终超平面模型是:

由于上面有不等式约束KKT条件有:   可以简单理解为极值是在边界条件上取得的。

由f(x)可知,当ai=0时,该样本不会对结果造成影响;yi*f(xi)=1说明,只是支持向量对于最终结果会有影响。

训练完成后,大部分结果都不需要保留,最终模型只与支持向量有关。

3.SMO求解对偶问题

求解结果ai满足约束条件:

每次选择一个ai,并改变另一个参数aj,以此来满足上式等式约束(关于如何选取参数是关键,后面编程实现一下试试),求解关于对偶问题的最优解,这样每次改变两个参数ai,aj直到结果收敛:

    其中   

将上式aj代入对偶形式中,可以得到关于ai的二次函数,约束为ai>=0,可以利用二次函数性质快速求解。

若求得ai,有:

又因为

其中i是S所有支持向量中的任何一个,b可以通过平均值的方式来求解

4.核函数

当样本在某个空间并不是线性可分的,可以通过映射方式使得样本映射到更高维空间来实现样本的线性可分

对于x进行更高维的映射 ,假设样本已经可以线性可分,之后线性超平面方程变为:

优化目标:

对偶问题:

     

其中关于x的高维向量的计算,一般难于直接计算。

假定存在这样一个函数:

即高维空间的向量运算转化为原本空间的运算,这样有:

求解得:

以上函数成为核函数,即最终模型结果与样本的核函数有关,支持向量展式

核函数:X表示样本空间,k是X*X对称函数,则k是核函数,并且对于样本D={(x1,y1),(x2,y2)..(xm,ym)},核矩阵K是半正定的。

常见核函数:  线性核  多项式核  高斯核   拉普拉斯核  Sigmoid核

核函数的运算:

线性组合:

直积: 

对于任意函数g(x): 

核函数进行以上运算仍为核函数。

5.软间隔

上述求解过程可以称为硬间隔,即假定超平面可以把所有样本都线性分割,然后实际中由于噪声的存在,可以并无法完全实现样本的线性分割,可以采用软间隔,即并不要求所有样本点都满足约束条件,允许一部分点不满足距离约束条件,但同时这样的点应该尽量少。

定义01损失函数

引入软间隔,优化目标函数变为:

通过调整参数C可以控制不满足样本的数量,例如C为无穷大,则损失部分应为0,即为硬间隔。当C适当减少时,不满足约束条件点数量可以适当增加。

替代函数肥非凸非连续,一般采用替代损失来替代损失函数:

若采用hinge损失:

引入松弛变量,有:

以上为软间隔向量机的一般形式。

通过拉格朗日乘子法有:

ai,ui为拉格朗日乘子,对于L求偏导等于零,得:

代入基本型有:

考虑KKT条件:

若ai==0  则该样本不会对f(x)产生影响;

ai>0  yif(xi)=1-\varepsilon 即该样本是支持向量;

ai<C,  \varepsilon=0  该样本恰巧在最大间隔边界上;

ai>C,  u=0   \varepsilon<=1 样本在最大间隔内部;\varepsilon>1  样本被错误分类。

软间隔模型最红结果只与支持向量有关。通过hinge损失函数保持了解的稀疏性。

一般化损失函数有:

前一项为正则化项, 结构风险 描述模型f的性质  可以降低过拟合的风险

C正则化系数   

后一项   经验风险  描述模型与数据的契合程度

常用的正则化项有Lp范数      L0,L1  解的稀疏性    L2解的分量取值尽量均衡

6.支持向量回归SVR

给定训练样本D={x(xi, yi)} ,找到f(x)使得与y真实值尽量接近。普通回归假定f(x)与真实值只要不相等就计算误差。支持向量回归,假设f(x)与y在一定区域内可以容忍,当超出预期时才计算误差,即当样本落在间隔为2\varepsilon的区域内就认为预测正确。

其中定义不敏感函数:

引入松弛变量:   间隔带两侧的松弛程度有所不同

SVR基本型:

通过拉格朗日乘子法:

求偏导等于零:

代入SVR得:对偶问题

考虑KKT条件:

解形式:

参数b求解:

考虑特征映射:

其中k为核函数。

7.核方法

表示定理:核函数k    H为核函数再生希尔伯特空间   hH表示H空间中关于h的范数,任意单调递增函数\mho,任意非负损失函数l,目标优化为

解可以表示为:   解可以表示为核函数的线性组合

8.总结

LR与SVM的异同:

相同点:

1.都是分类算法;

2.线性分类算法  分类决策面都是线性的;

3.都是监督学习问题;

4.都是判别模型:判别模型会生成一个表示P(Y|X)的判别函数(或预测模型),而生成模型先计算联合概率p(Y,X)然后通过贝叶斯公式转化为条件概率。简单来说,在计算判别模型时,不会计算联合概率,而在计算生成模型时,必须先计算联合概率。或者这样理解:生成算法尝试去找到底这个数据是怎么生成的(产生的),然后再对一个信号进行分类。基于你的生成假设,那么那个类别最有可能产生这个信号,这个信号就属于那个类别。判别模型不关心数据是怎么生成的,它只关心信号之间的差别,然后用差别来简单对给定的一个信号进行分类。常见的判别模型有:KNN、SVM、LR,常见的生成模型有:朴素贝叶斯,隐马尔可夫模型。

不同点:

1.loss function不同

LR基于概率理论,假设样本为1的概率可以用sigmoid函数来表示,然后通过极大似然估计的方法估计出参数的值;SVM​基于几何间隔最大化原理,认为存在最大几何间隔的分类面为最优分类面.

2.支持向量机只考虑局部的边界线附近的点,而逻辑回归考虑全局(远离的点对边界线的确定也起作用).线性SVM不直接依赖于数据分布,分类平面不受一类点影响;LR则受所有数据点的影响,如果数据不同类别strongly unbalance,一般需要先对数据做balancing

3.在解决非线性问题时,支持向量机采用核函数的机制,而LR通常不采用核函数的方法

4.​线性SVM依赖数据表达的距离测度,所以需要对数据先做normalization,LR不受其影响  基于概率与基于距离

5.SVM的损失函数就自带正则损失函数中的1/2||w||^2项,SVM是结构风险最小化算法,LR必须另外在损失函数上添加正则项。

对于单层模型,重点在于损失函数的不同

lr的损失函数是 cross entropy loss

 adaboost的损失函数是 expotional loss

svm是hinge loss

常见的回归模型通常用 均方误差 loss

猜你喜欢

转载自blog.csdn.net/u014106644/article/details/83409449