SVM -支持向量机原理详解与实践之四

SVM -支持向量机原理详解与实践之四

  1. SVM原理分析

    1. SMO算法分析

SMO即Sequential minmal optimization, 是最快的二次规划的优化算法,特使对线性SVM和稀疏数据性能更优。在正式介绍SMO算法之前,首先要了解坐标上升法。

  1. 坐标上升法(Coordinate ascent)

坐标上升法(Coordinate Ascent)简单点说就是它每次通过更新函数中的一维,通过多次的迭代以达到优化函数的目的。

  1. 坐标上升法原理讲解

为了更加通用的表示算法的求解过程,我们将算法表示成:

 

3.13-1

坐标上升法的算法为:

这个算法中最为关键的地方就是内循环对于的求解,意思是固定除了之外的所有a(从i=1~m),也就是说将除外的其他变量看成是常数,并且将W看做是关于的函数,那么直接对求导优化得到极大值,在上面算法的版本中,内循环优化变量的顺序是但是一个更高级的版本可能选择其它的顺序,例如我可以根据我们的期望来选择下一个变量来更新,并让W(a)有最大的增加。

当函数W在内循环中能够最快的达到最优,则坐标上升是一个有效的算法,下面是一个坐标上升的示意图:

上图中的椭圆形线代表我们需要优化问题的二次函数的等高线,变量数为2,起始坐标是(2,2),途中的直线是迭代优化的路径,可以看到每一步都会相最优值前进一步,而且前进的路线都是平行与相应的坐标轴的,因为每次只优化一个变量。

 

  1. C++算法编程实践

问题:求解函数的最大值。

解:回顾我们前面分析的求取函数最大值的关键是,求解每一个迭代变量的导数,当求解某一变量的导数的时候,其他的变量看做是常数:

VS2013控制台工程参考代码如下:

// Coordinate ascent.cpp : Defines the entry point for the console application.

//

 

#include"stdafx.h"

 

 

#include<iostream>

usingnamespace std;

#definef(x1,x2,x3) (-x1*x1-2*x2*x2-3*x3*x3+2*x1*x2+2*x1*x3-4*x2*x3+6)

int_tmain(intargc,_TCHAR*argv[])

{

    double x1 = 1;

    double x2 = 1;

    double x3 = 1;

    double f0 =f(x1, x2, x3);

    double err = 1.0e-10;

    while (true)

    {

        x1 = x2 + x3;//x1求导的表达式,每次迭代后更新

        x2 = 0.5*x1 - x3;//x2求导的表达式,每次迭代后更新

        x3 = 1.0 / 3 * x1 - 2.0 / 3 * x2;//x3求导的表达式,每次迭代后更新

        double ft =f(x1, x2, x3);//求函数值

        if (abs(ft - f0)<err)//判断f是否收敛

        {

            break;//收敛即完成求解过程

        }

        f0 = ft;//更新f0

    }

    cout <<"\nmax{f(x1,x2,x3)}=" <<f(x1, x2, x3) << endl;

    cout <<"取得最大值时的坐标:\n(x1,x2,x3)=(" << x1 <<"," << x2 <<"," << x3 <<")" << endl;

    system("pause");

    return 0;

}

运行结果如下:

  1. SMO算法详解

回到我们软间隔与正则化章节(还有最优间隔分类器),我们的对偶问题,就是通过固定拉格朗日乘子a,得到w和b的最优化表达式(关于a的表达式),所以最后我们只需要确认a,我们就可以最终确定w和b,但是在讨论SMO算法之前,我们并没有真正求解出。这一章我们就会通过介绍SMO算法对对偶问题最后需要解决的问题:

做出一个求解,也就是在参数上求W最大值的问题,注意其中的就是训练样本的输入,x即为样本的输入特征,y即样本对应的标签(结果)。

按照前面介绍的坐标上升的思路,我们首先固定除了以外的所有参数,然后在上求极值。现在下面先固定以外的所有参数,看看具体的求解步骤:

  1. 首先由优化问题的约束条件可知:

即可推出

 

 

两边乘以:

 
 

(3.13.2-1)

因为,所以,因此到这一步,就由其它的决定,如果我们固定主,无论如何不能违背优化问题的约束

    因此如果我们想要更新一些的对象,为了保持满足约束条件就必须至少快速的更新它们中的两个,这个就激发出SMO算法,那么SMO算法可以简单的描述成:

重复大括号中的操作直到收敛{

  1. 选择一对来更新下一个(用启发式的方法,也就是尝试选取两个允许我们朝着全局最大方向做最大前进的参数)
  1. 固定所有其它的参数,优化关于和的函数W(a)

}

为了测试该算法的收敛性,我们可以检查KKT条件:

是否满足收敛容错参数,典型值为0.1~0.001之间。

SMO作为一个高效的算法的关键原因在于计算更新的效率非常高。假设当前我们有一些满足(3.10.3-5)的约束,固定,想要优化关于的函数,用表示有:

 

 

由于右边固定,我们可以直接用一个常数表示,例如用表示:

于是我可以将的约束画出来:

根据约束条件:

可知上图中表示的横轴和纵轴必须限制在0到C的方框内,并且也要在直线上。并且的纵轴也必须满足,否则就不能满足约束条件。

下面用表示,过程是:

其中,因为,所以有:

所以目标问题W可以表示为:

其中为常数。

实际的问题中W展开后就是一个关于的二次函数, A、B、C是固定值,这样通过对W进行求导可得,然而要保证满足,我们使用 表示求导求出的, 然而最后的,需要根据下面的情况得到:

求出以后,我们可以就可以得到

 

  1. 支持向量机实践

这里限于篇幅,实践的内容将在下一篇展开…


  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 支持向量机(Support Vector Machine, SVM)是一种监督学习算法,旨在寻找最佳的超平面,将不同类别的数据分开。从分类问题的角度来看,SVM要求找到一个超平面,使得不同类别的样本点在该超平面两侧,同时离该超平面的距离最大。该最大距离被称为margin,而最佳的超平面被称为最大间隔超平面。 SVM的核心思想是将数据映射到高维空间中,使得数据在高维空间中更容易线性可分。在高维空间中,由于数据点增多,出现维度灾难的问题,而此时SVM可以通过核函数来避免该问题。 在求解最大间隔超平面时,SVM依赖于一些向量,称为支持向量。这些支持向量是最接近最大间隔超平面的样本点,它们对求解最大间隔超平面起到了至关重要的作用。 SVM可以应用于二分类、多分类以及回归问题,并且在实际应用中表现出色。在实际使用中,需要根据具体问题选择适当的核函数,并且需要对超参数进行调整。此外,还需要注意数据的标准化处理,以避免不同维度的数据误导模型。 总之,SVM是一种强大的分类,具有多种核函数可供选择,能够适用于不同类型数据的分类问题。 ### 回答2: 支持向量机SVM)是一种监督学习算法,可以用于分类和回归问题。它的优点是可以处理非线性分类问题,并且对于数据集中的噪声有较好的鲁棒性。SVM利用最大化分类边界来进行分类,最终得到的分类是一个高维空间中的超平面。 SVM原理是基于寻找最优超平面,这个超平面能够把不同类别的样本点分开。在二维平面上,这个超平面可以是一条直线,但是在高维空间中,它是一个超平面。SVM通过最大化边缘来寻找最优的超平面。边缘是一个超平面到两边最近样本点的距离,它表明了模型的泛化能力,即分类对于新的数据的表现能力。 支持向量机的核心思想是寻找一条最大间隔的线性分割超平面。在非线性分类任务中,使用核方将特征向量转换为高维空间中的特征向量。在这个高维空间中,数据点可以被更好地分割,即可能会出现线性可分的情况。 关键的问题是如何解决分割垂直于某个维度的问题,此时支持向量机利用核函数的技巧将数据集映射到高维空间,并在这个高维空间中采用线性可分的方来进行分类。通常情况下,核函数常用的有线性核、多项式核和径向基函数核。 其中,径向基函数核(RBF kernel)是最常用的核函数之一。这个核函数可以将数据点映射到一个无限维的特征空间上。径向基函数核使用一个参数gamma来决定核函数的变化速度。当gamma的值很小的时候,核函数的变化会很慢,分类的边界将会很宽。当gamma的值很大的时候,核函数的变化会很快,分类的边界将会很窄。 SVM的优化问题可以通过拉格朗日乘子来解决。可以使用拉格朗日乘子来构造一个拉格朗日函数,并使用约束条件来推导对偶形式的SVM问题。这个对偶形式的问题可以使用高效的SMO算法来求解。 SVM是一种强大的分类方,它适用于许多不同的应用场景,并在许多任务中实现了很好的结果。支持向量机具有较好的泛化性能、能够处理高维数据、适用于不同类型的输入数据,并且能够快速训练分类。 ### 回答3: SVM是一种二分类模型,它的主要思想是通过线性或非线性的方式找到最优的超平面,将不同类别的数据点分开。SVM支持向量机通过选择支持向量,来定义最优的超平面。支持向量是离超平面最近的数据点,它们对最终分类结果起到决定性的作用。在选取支持向量的过程中,SVM支持向量机尝试选择最少的支持向量,以达到泛化能力强的效果。 SVM支持向量机的分类可以采用不同的核函数进行拟合,从而实现非线性分类。其中,常用的核函数包括线性核、多项式核、高斯核等。利用核函数的基本原理,我们可以把数据从原本空间映射到更高维的空间中。在高维空间,数据点在非线性情况下更容易区分,从而提高了分类的准确率。 SVM支持向量机的训练过程可以利用现有的优化算法求解,例如序列最小优化算法SMO)和改进的SMO算法等。这些算法通过不断迭代优化模型参数,直至达到最优的分类效果。在模型训练完成之后,我们可以利用模型进行分类预测,从而实现新数据的分类。 总之,SVM支持向量机是一种基于分类边界找寻的算法,在分类效果、泛化能力和计算效率等方面具有优势,因此在分类领域有着广泛的应用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值