支持向量机SVM支持向量机回归SVR原理简述及其MATLAB实例.docx
《支持向量机SVM支持向量机回归SVR原理简述及其MATLAB实例.docx》由会员分享,可在线阅读,更多相关《支持向量机SVM支持向量机回归SVR原理简述及其MATLAB实例.docx(23页珍藏版)》请在冰豆网上搜索。
支持向量机SVM支持向量机回归SVR原理简述及其MATLAB实例
支持向量机(SVM)、支持向量机回归(SVR):
原理简述及其MATLAB实例
支持向量机(SVM):
原理及其MATLAB实例
一、基础知识
1、关于拉格朗日乘子法和KKT条件
1)关于拉格朗日乘子法
首先来了解拉格朗日乘子法,为什么需要拉格朗日乘子法呢?
记住,有需要拉格朗日乘子法的地方,必然是一个组合优化问题。
那么带约束的优化问题很好说,就比如说下面这个:
这是一个带等式约束的优化问题,有目标值,有约束条件。
那么你可以想想,假设没有约束条件这个问题是怎么求解的呢?
是不是直接f对各个x求导等于0,解x就可以了,可以看到没有约束的话,求导为0,那么各个x均为0吧,这样f=0了,最小。
但是x都为0不满足约束条件呀,那么问题就来了。
有了约束不能直接求导,那么如果把约束去掉不就可以了吗?
怎么去掉呢?
这才需要拉格朗日方法。
既然是等式约束,那么我们把这个约束乘一个系数加到目标函数中去,这样就相当于既考虑了原目标函数,也考虑了约束条件。
现在这个优化目标函数就没有约束条件了吧,既然如此,求法就简单了,分别对x求导等于0,如下:
把它在带到约束条件中去,可以看到,2个变量两个等式,可以求解,最终可以得到,这样再带回去求x就可以了。
那么一个带等式约束的优化问题就通过拉格朗日乘子法完美的解决了。
更高一层的,带有不等式的约束问题怎么办?
那么就需要用更一般化的拉格朗日乘子法,即KKT条件,来解决这种问题了。
2)关于KKT条件
继续讨论关于带等式以及不等式的约束条件的凸函数优化。
任何原始问题约束条件无非最多3种,等式约束,大于号约束,小于号约束,而这三种最终通过将约束方程化简化为两类:
约束方程等于0和约束方程小于0。
再举个简单的方程为例,假设原始约束条件为下列所示:
那么把约束条件变个样子:
现在将约束拿到目标函数中去就变成:
那么KKT条件的定理是什么呢?
就是如果一个优化问题在转变完后变成
其中g是不等式约束,h是等式约束(像上面那个只有不等式约束,也可能有等式约束)。
那么KKT条件就是函数的最优值,它必定满足下面条件:
2、范数
1)向量的范数
2)矩阵的范数
3)L0、L1与L2范数、核范数
二、SVM概述
1、简介
支持向量机(supportvectormachines,SVM)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机;SVM还包括核技巧,这使它成为实质上的非线性分类器。
SVM的的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题。
SVM的的学习算法就是求解凸二次规划的最优化算法。
2、SVM算法原理
1)线性支持向量机
SVM学习的基本想法是求解能够正确划分训练数据集并且几何间隔最大的分离超平面。
如下图所示,
即为分离超平面,对于线性可分的数据集来说,这样的超平面有无穷多个(即感知机),但是几何间隔最大的分离超平面却是唯一的。
凸优化问题:
简单的说,优化问题中,目标函数为凸函数,约束变量取值于一个凸集中的优化问题称为凸优化,
综上讨论,线性支持向量机学习算法总结如下:
传统的SVM做的事情其实就是找到一个超平面,实现二分类,一类+1,一类-1。
如上所示。
它的目的就是使得两类的间隔最大。
黑色的块表示距离分割面最近的样本向量,称为支持向量。
2)非线性支持向量机
(1)简介
如果我们在低维空间里找不到一个线性分类面把样本分开,SVM就为我们提供了一个思路:
将数据从低维空间映射到高维空间后,就很可能使得这堆数据线性可分。
比如说,我们要在猫科动物这个特征很局限的“低维空间”里去分猫和老虎,是比较困难的,因为他们很多特征比较相近。
但是,如果我们有了更多的参考依据,从生物界的视角,即一个“高维空间”再去区分猫和老虎,我们就有了更多的理由来做出科学的辨别。
至于如何低维映射到高维,就是一门数学上的学问了。
数据从输入到输出的过程其实和神经网络非常像:
K就是核函数,做一个内积的运算。
SVM中核函数保证了低维空间里的计算量,输出到高维空间里。
K相当于隐含层的神经元。
核函数的输出乘上权重,进入激活函数处。
(2)原理
二、SVR:
SVM的改进、解决回归拟合问题
为了利用SVM解决回归拟合方面的问题,Vapnik等人在SVM分类的基础上引入了不敏感损失函数,从而得到了回归型支持向量机(SupportVectorMachineforRegression,SVR)。
SVM应用于回归拟合分析时,其基本思想不再是寻找一个最优分类面使得两类样本分开,而是寻找一个最优分类面使得所有训练样本离该最优分类面的误差最小。
三、多分类的SVM
当我们要分多类,而不是简单的二分类(+1,-1)时,怎么破?
解决思路:
把多分类转化为二分类问题。
具体来看有两个办法:
1.one-against-all
Classificationofnewinstancesforone-against-allcaseisdonebyawinner-takes-allstrategy,inwhichtheclassifier
withthehighestoutputfunctionassignstheclass.
比如有一堆样本,打算分成10类。
那么我们先取第1类训练标记为【1】。
其他9类都是【-1】。
这样经过一次SVM就可以得到第1类。
然后我们对【-1】中的9类继续做上述操作,分出第2类。
再以此类对,逐渐把第3、第4类分出来……直至分完。
2.one-against-one
Fortheone-against-oneapproach,classificationisdonebyamax-winsvotingstrategy,inwhicheveryclassifierassignstheinstancetooneofthetwoclasses,thenthevotefortheassignedclassisincreasedbyonevote,andfinallytheclasswithmostvotesdeterminestheinstanceclassification.
比如,一共有10种类别的一堆数据。
那么我们就要训练C{2,5}=10(组合数)个SVM分类器。
每个SVM分类器都可以区分出两种类别。
我们把数据分别输入到这10个SVM分类器中,根据结果进行投票,依据得票数最多来确定它的类别。
四、QP(二次规划)求解
五、SVM的MATLAB实现:
Libsvm
工具包安装教程
1、Libsvm工具箱使用说明
0--C-SVC
1--nu-SVC
2--one-classSVM
3--epsilon-SVR
4--nu-SVR
-t核函数类型:
核函数设置类型(默认2)
0--linear:
u'*v线性
1--polynomial:
(gamma*u'*v+coef0)^degree 多项式
2--radialbasisfunction:
exp(-gamma*|u-v|^2)RBF
3--sigmoid:
tanh(gamma*u'*v+coef0)
4--precomputedkernel(kernelvaluesintraining_instance_matrix)
-ddegree:
核函数中的degree设置(针对多项式核函数)(默认3)
-gr(gama):
核函数中的gamma函数设置(针对多项式/rbf/sigmoid核函数)(默认1/k)
-rcoef0:
核函数中的coef0设置(针对多项式/sigmoid核函数)((默认0)
-ccost:
设置C-SVC,e-SVR和v-SVR的参数(损失函数)(默认1) 惩罚因子
-nnu:
设置v-SVC,一类SVM和v-SVR的参数(默认0.5)
-pp:
设置e-SVR中损失函数p的值(默认0.1)
-mcachesize:
设置cache内存大小,以MB为单位(默认40)
-eeps:
设置允许的终止判据(默认0.001)
-hshrinking:
是否使用启发式,0或1(默认1)
-wiweight:
设置第几类的参数C为weight*C(C-SVC中的C)(默认1)
-vn:
n-fold交互检验模式,n为fold的个数,必须大于等于2
-ssvm类型:
SVM设置类型(默认0)
其中-g选项中的k是指输入数据中的属性数。
option-v随机地将数据剖分为n部分并计算交互检验准确度和均方根误差。
以上这些参数设置可以按照SVM的类型和核函数所支持的参数进行任意组合,如果设置的参数在函数或SVM类型中没有也不会产生影响,程序不会接受该参数;如果应有的参数设置不正确,参数将采用默认值。
●svmpredict
⏹– Predictdatausingsupportvectormachine
⏹– [predict_label,accuracy]=svmpredict(test_label,test_matrix,model);
下面要用到的数据集在:
链接:
密码:
d0u7
2、重要函数:
●meshgrid交叉验证用
⏹– GenerateXandYarraysfor3-Dplots
⏹– [X,Y]=meshgrid(x,y)–
●svmtrain
⏹– Trainsupportvectormachineclassifier
⏹– model=svmtrain(train_label,train_matrix,’libsvm_options’);
⏹Options:
可用的选项即表示的涵义如下:
3、示例
链接:
提取码:
9xxs