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

1. 支持向量

1.1 线性可分

首先我们先来了解下什么是线性可分

 

   样本中距离超平面最近的一些点,这些点叫做支持向量。

 

复习下函数和向量

假如有个方程

 

     

           y=x/2-1可以变化为 -x+2y+2=0
           f(x,y)=-x+2y+2,其中红色的就是他的法向量
写成向量的形式:

 

         

改写下

                      

前面的系数项可以令其为

                                    

x,y 的那一项,其实可以演变为 n行,所以可以简化为

                                   

后面的2是常数项,用 b 代替
这样处理完,我们的式子可以修改为

                           

 

其中 w 就是我们的法线方向,x 是我们的参数,b 是截距项。

此时如果有个

带入式子得到是正值,那么就在法线的同方向;否则在法线的逆方向。如果等于0,那么该点就在线上。

f(x1,x2)代表一个线,f(x1,x2,x3)代表一个面,如果是 n 维的,那么给他一个牛逼的名称“超平面”,由于这个名字太牛逼,所以低维的也叫超平面。

计算过程和算法步骤

接入给定一个特征空间上的训练数据集,

                             

其中

                              

                               

这里为什么 y 取值+1和-1?
因为这样取值方便后面的推导,如果非要把+1和-1换为+3和-8什么的,其实没有什么不同。后面推导不受影响。

写成+1和-1的话,那么我们的

                          

,那么

                       

两边同时乘以 yj,得到

                      

,这样我们就可以很方便的得到两个标记相乘等于两个标记相除。如果选择不同的值,就得不到上面的式子。

推导目标函数

分割平面:

       

训练集:x1,x2,x3......
目标集:y1,y2,y3...... y属于1和-1的集合
新数据的分类:sign(y(x))
根据题设

                    

其中

                    

就是一个映射,

                    

就是原封不动一阶映射,二阶映射的例子如下:
                   {1,x1,x2,x3}==>{1,x1,x2,x3,x12,x22,x3^2,x1x2,x2x3,x1x3}把原来的四维转换成10维。
接下来就有

          

其中:y(x)为预测值,y 为真实值,他们互为推导。最终他们的乘积大于0.
从而可以得到下面的公式(其实是点到直线的距离)

         

我们的目标函数:

     

解释:对于所有的样本到平面的距离求最近,也就是最小值,然后得到的这些平面里面根据 w 和 b再求 最大值。

如何优化

转换等价问题,直接来解决的确棘手。先来看
线性可分的这个图

         

可以看出,有3个支持向量。

上虚线五角星的那个点到红线的距离是一个值,而且是最近的一个距离,假如该距离为 d=3,那么也就是

                        

两边同时除以3

                          

也就是范数 w 乘以3,但是对整个方程来说位置是不发生变化的。(其实 w 是我们要求的,可以随便设置,总能得到右边为1)

打个比方,假如有个方程 f(x,y)=ax+by+c=0,有个点到该线的距离为d,那么我们可以除以 d,使得到改线的距离为1,可以认为是距离归一处理。那么同理我们总能得到一个 w,使得五角星那个点到红线的距离为1,就得有个约束条件就是

                       

,好了,现在这个值要求取最小值,而且又是大于等于1,那么就直接取1就是最小值。
那么新的目标函数就变化为

                         

一个数的倒数求最大,也就是这个数求最小,也就是求这个数的平方最小,也就是求这个数平方的一半最小,好了,公式继续演变为:

        

这个就是我们需要求解的目标,假如 n=10000(n 是样本个数),也就是有1万个下面的约束条件下求上式子的最小值,对于这个目标函数如何来求呢?带有约束条件的求极值问题,就想到拉格朗日乘子法。

拉格朗日乘子法和KKT条件

其实拉格朗日乘子法的约束条件是要求等于某个条件,而这里是不等于,也可以这么做。

        

这个式子的暂且放一边,我们来梳理下拉格朗日乘子法。

假设有个函数要求最小值,min f(x),其中有两部分要求,第一部分是不等式部分:

                

                

               

这里所有条件的方向可以修改为

 

                

,因为可以增加负号来改变方向,不是什么大问题。
最终也就是

               

第二部分是等式部分,记为

               

本科阶段的拉格朗日乘子法只有等式部分,现在这里增加了不等式部分,针对不等式部分,做如下操作。

先设置一系列的

               

,构造一个新的函数

              

这个就是拉格朗日函数。对于这个函数来说,以

w为变量,对其求导数,可得系数为

,在二维坐标上就是一条线,同理

等。
将他们画在一张坐标系里面,

         

对于这3个线段求取每个 x 点的最小值,得到的是红色的这个区域的线,同理,n 条这样的线也可以得到这样一个凹函数,凹函数必有最大值,并且是全局最大。

那么

                                      

到底是什么?

继续看下

                                    

 

                                       

因为

                                       

所以

                                       

因为

                                      

所以无论 lambda 取什么值,

                                        

这就是说 G(x)是一个 f(x)加上一个负数,那么也就是说 G(x)的最大也就是 f(x)了。

                                          

,那么要求 minf(x)也就是求

                                       

可以找到他的对偶函数

                                      

再回到我们原来的式子,

 

          

这个式子比上面的理论要简单点,没有等式约束。那么他的原始极小极大问题

          

他的对偶问题为极大极小问题

          

为了求最小值,我们需要对w 和 b 分别求导,并且使之为0,
其中

最终得到

也就是

接下来,对 b 求偏导数,得到

w 不就是法向量嘛,其中包含的 alpha=0的点不是支撑向量,而 alpha 不为0 的才是 SV。pha(x)就是核函数,所有的这些在这里可以体现出来了。
归纳下:

         

继续推导。。。带入 w 和 b,剩下 alpha 的式子。

         

最后得到求 alpha 的式子

 

        

使用某种方法(SMO)求得 alpha,带入 w 和 b 就可以求得 w。

SMO 算法,由条件可知,
[图片上传失败...(image-ab4eb3-1526290967990)]
我们需要调节2个 alpha 参数,一大一小,使得为0,满足条件后求得 alpha 较大值,然后慢慢调节,再得到一个较大值,这样的按照序列求得最大的优化方法叫 SMO

掉个方向,得到

           

举个例子看的明白些:
给定3个数据点,正例点x1=(3,3)T,x2=(4,3)T,反例点 x3=(1,1)T, 求解线性可分的SVM。

            

解:目标函数是

 

             

根据

可得

         

其中正例就是 x1=(3,3,1) x2=(4,3,1);负例x3=(1,1,-1)
最后是表示 y 的值。x1对应的系数 alpha1,x2对应的系数是 alpha2,x3对应的系数是 alpha3.

将 alpha3=alpha1+alpha2带入式子计算得到关羽 alpha1和 alpha2 的han 函数

 

        

对 alpha1和 alpha2求偏导令他为0,得到在(1.5,-1)这个点取到极值,但是改点不满足 alpha2>0这个条件,所以最小值在边界上没有达到。
令 alpha1=0,最小值 s(0,2/13)=-2/13=-0.1538
令 alpha2=0,最小值 s(1/4,0)=-1/4=-0.25
所以得到s(alpha1,alpha2)在1/4,0处达到最小,此时 alpha3=alpha1+alpha2=0.25
所以 alpha1=alpha3=0.25对应点 x1和 x3构成支持向量。
带入公式:

             

这里 fai(xi)就是 xi

得到 w1=w2=0.5 b=-2
所以超平面为

         

图形

                

x1的系数和x3的系数是0.25,而x2的系数是0,也就是说 x2没有参与支持向量的构建,不是支持向量。

以上是线性可分,那么线性不一定可分的咋办呢?
如图

           

按照可分那就是实线,貌似虚线应该更好。
若线性不可分,需要加入松弛因子[图片上传失败...(image-8be0f1-1526290967990)]>=0,
此时约束条件变成:

 

=0就是线性可分。
目标函数:

                 

这个式子中,当 C 趋向无穷大的时候,

只能取0才能保证能取最小值。C 可以认为是允许犯错误的容忍程度,C 太大,表示对错误完全不能容忍,必须要线性可分。从另外角度来说,C 太大,那么不允许犯错误,那么过渡带就会窄。C 小些的话,过渡带会宽些,也就是泛化能力较强。

归纳下:

           

对应的拉格朗日函数(注意符号,ξ>=0的变化)

 

          

然后对其求偏导数

          

 

将三个式子带入

 

       

 

把 μ消掉了
对上式子求关羽 α 的极大,得到

          

 

上式右下角的条件限制了α的取值范围是缩小了的。

进一步整理得到对偶问题

           

 

再进一步构造最优化问题

         


求解得 a^*
然后计算出w 和 b

         

注意:计算 b 的时候需要满足α在(0,C)之间

最终求得超平面:

           

损失函数分析

圆圈的点:他们的α=C,他们是有损失的,并且哪些红色线段表示损失值;虽然他们分的是对的。但是已经进入敏感地带。
方块的星:他们的0 < α < C,是支持向量
其他点:α = 0

损失值=1-d;d 是点到超平面的距离,那么过渡带之外的损失值为0,于是得到 SVM 损失函数图(Hindge损失)

                    

也就是

                   

但得到这个最小的时候,求得新的 w 和 b。

我们再看下
这里出现了损失函数,经过变换得到新的损失函数

                     

后面一项是 L2正则

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用Matlab实现CNN-SVM卷积支持向量机分类预测的步骤如下: 1. 数据准备:首先,需要准备训练和测试数据集。这些数据集应包含已标记的样本图像和对应的分类标签。 2. 卷积神经网络(CNN)训练:使用Matlab的深度学习工具箱,可以构建和训练卷积神经网络。首先,定义网络架构,包括卷积层、池化层、全连接层等,并设置相应的超参数(如学习率、批处理大小等)。然后,使用训练数据集对网络进行训练,通过反向传播算法优化网络权重。重复训练过程直到达到预设的准确率或迭代次数。 3. 特征提取:在训练完成后,使用训练好的CNN模型提取图像的特征表示。通过将图像输入到CNN中,获取卷积层或全连接层的输出作为特征向量。 4. 支持向量机(SVM)训练:使用Matlab的SVM工具箱,将CNN提取的特征向量作为输入数据,对SVM进行训练。在训练过程中,选择合适的核函数(如线性核、高斯核等),并设置相应的超参数(如正则化参数、惩罚项等)。训练过程将优化支持向量机模型的权重和偏置。 5. 分类预测:使用训练好的CNN-SVM模型进行分类预测。首先,将测试样本输入到CNN中,提取特征向量。然后,将特征向量作为输入数据,通过训练好的SVM模型进行分类预测。根据SVM模型返回的分类结果,确定图像的类别。 综上所述,借助Matlab的深度学习和机器学习工具箱,可以实现CNN-SVM卷积支持向量机分类预测。通过训练卷积神经网络和支持向量机模型,提取图像特征并进行分类预测。这种组合方法可以充分利用卷积神经网络在图像识别任务中的优势,并借助支持向量机的分类能力,提高分类预测的准确性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潘永青

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值