svm的简单理解

来源:互联网 发布:ida软件 编辑:程序博客网 时间:2024/06/07 05:29

SVM是一种训练机器学习的算法,可以用于解决分类和回归问题,同时还使用了一种称之为kernel trick的技术进行数据的转换,然后再根据这些转换信息,在可能的输出之中找到一个最优的边界。简单来说,就是做一些非常复杂的数据转换工作,然后根据预定义的标签或者输出进而计算出如何分离用户的数据。

简单理解:

什么是机?什么是向量?什么是支持?机就是算法的意思,为什么不叫算法叫机是因为一些历史原因。向量就是向量,做分类的时候每个样本都用一个向量表示。支持有撑起来,决定的意思。做分类的时候一般都是找到一个分类超平面(二纬的话是线),超平面一侧是正类一侧是负类。何为支持向量,就是决定了这个分类超平面的向量。所以可以这样理解支持向量机:它是一个分类算法,这个算法是通过超平面进行分类的,这个超平面是由支持向量决定的。

最大间隔超平面:支持向量机中最简答的模型是最大间隔分类器,他只能用于特征空间中线性可分的数据,因此不能在现实世界的许多情况下使用。

凸二次规划:

稀疏解:

最大松弛变量:



首先,SVM全称是supported vector machine(支持向量机)。我们先不管它的名称,因为这一开始并不是很好理解所谓的支持向量是什么。但是本质上,这就是一个分类器,并且是二类分类器。分类器我想答主一定是理解的吧,我就不赘述了,为什么是二类的分类器呢?因为它最多只能告诉你这个东西要么属于A要么属于B,不能告诉你要么属于A要么属于B要么属于C。
我举个例子吧,当你给SVM一段文本,比如“这款手机屏幕很大,我很喜欢”,你想知道这个文本的情感倾向是积极的还是消极的,你把这个文本扔给SVM分类器,SVM会告诉你说它的情感是积极的。但是现在我们多了一个选项,“中立”。你想让SVM告诉你这个文本是积极还是消极还是中立,这时候SVM就无能为力了。当然,有别的策略可以利用SVM处理多分类的问题,这个留到最后再说。
先开始说SVM的思想。如图的例子,(训练集)红色点是我们已知的分类1,(训练集)蓝色点是已知的分类2,我们想寻找一个分界超平面(图中绿线)(因为示例是二维数据点,所以只是一条线,如果数据是三维的就是平面,如果是三维以上就是超平面)把这两类完全分开,这样的话再来一个样本点需要我们预测的话,我们就可以根据这个分界超平面预测出分类结果。




那我们如何选择这个分类超平面呢?从数学上说,超平面的公式是\omega^{T}  x +b=0,也就是说如何选取这个\omega (是个向量)。
传统方法是根据最小二乘错误法(least squared error),首先随便定选取一个随机平面,也就是随机选取\omega b,然后想必会在训练集中产生大量的错误分类,也就是说,\omega^{T}  x +b结果应该大于0的时候小于0,应该小于0的时候大于0。这时候有一个错误损失,也就是说对于所有错误的分类,他们的平方和(least squared error)为:\sum_{i}^{n} ( \omega^{T}  x_{i}  +b )^{2} , 最小二乘法的目标就是让这个值趋于最小,对\omega 求导取0,采用梯度下降算法,可以求出错误平方和的极值,求出最优的\omega ,也就是求出最优的超平面。(可以证明,如果基函数是指数族函数,求出的超平面是全局最优的)
那我们SVM算法的思路是怎样的呢?不同于传统的最小二乘策略的思想,我们采用一种新的思路,这个分界面有什么样的特征呢?第一,它“夹”在两类样本点之间;第二,它离两类样本点中所有“离它最近的点”,都离它尽可能的远。如图所示:
<img src="https://pic2.zhimg.com/b21310bea4da968ae77bf0a24c8990d5_b.jpg" data-rawwidth="357" data-rawheight="229" class="content_image" width="357">在虚线上的点,就是我们所找到的离分解超平面最近的样本点,X类中找到了一个,O类找到了两个。我们需要分类超平面离这三个样本点都尽可能的远,也就是说,它处在两条虚线的中间。这就是我们找到的分界超平面。在虚线上的点,就是我们所找到的离分解超平面最近的样本点,X类中找到了一个,O类找到了两个。我们需要分类超平面离这三个样本点都尽可能的远,也就是说,它处在两条虚线的中间。这就是我们找到的分界超平面。
另外,这里我们就可以解释什么是“支持向量”了,支持向量就是虚线上的离分类超平面最近的样本点,因为每一个样本点都是一个多维的向量,向量的每一个维度都是这个样本点的一个特征。比如在根据身高,体重,特征进行男女分类的时候,每一个人是一个向量,向量有两个维度,第一维是身高,第二维是体重。
介绍完SVM的基本思想,我们来探讨一下如何用数学的方法进行SVM分类。首先我们需要把刚刚说的最大间隔分类器的思想用数学公式表达出来。先定义几何间隔的概念,几何间隔就是在多维空间中一个多维点到一个超平面的距离,根据向量的知识可以算出来:
\Upsilon =\frac{\omega^{T}x+b }{ ||\omega || }
然后对于所有的支持向量,使他们到超平面\omega^{T}x+b的距离最大,也就是
max_{\omega ,b}\Upsilon = max_{\omega ,b}  \frac{\omega^{T}x+b }{ ||\omega || }
因为对于所有支持向量,他们\omega^{T}x+b 的值都是一定的,我们假设恒等于1,那么上式变成了max_{\omega }  \frac{1}{ ||\omega || } =min_{\omega}\frac{1}{2}||\omega||^{2} ,并且对于所有的样本点,满足y^{i}(\omega^{T}x+b)>=1 的约束,因此,可以利用拉格朗日乘数法计算出它的极值。也就是求出这个超平面。
推导过程略为复杂,详细了解可以参考凸二次规划知识,结合SMO算法理解SVM计算超平面的详细过程。
总之,在计算的过程中,我们不需要了解支持向量以外的其他样本点,只需要利用相对于所有样本点来说为数不多的支持向量,就可以求出分类超平面,计算复杂度大为降低。




https://www.zhihu.com/question/21094489


自己理解:

SVM是一种训练机器学习的算法,本质上,这就是一个分类器,并且是二类分类器,这个算法是通过超平面进行分类的,最优分类面就是要求分类线不但能将两类正确分开(训练错误率为0),且使分类间隔最大

  使用SVM算法的思路:(1)简单情况,线性可分情况,把问题转化为一个凸优化问题,可以用拉格朗日乘子法简化,然后用既有的算法解决;(2)复杂情况,线性不可分,用核函数将样本投射到高维空间,使其变成线性可分的情形,利用核函数来减少高纬度计算量。

首先,核函数是什么

个人理解为:,核函数是一种表征映射、实现内积逻辑关系且降低计算复杂度的一类特殊函数(满足Mercer's condition)!

核函数的作用就是隐含着一个从低维空间到高维空间的映射,而这个映射可以把低维空间中线性不可分的两类点变成线性可分的。




0 0
原创粉丝点击