支持向量机的理解
来源:互联网 发布:最好的播放器 知乎 编辑:程序博客网 时间:2024/06/09 20:49
支持向量机学了很久,有些地方始终没明白,觉得很有必要总结一下:
1. 线性可分支持向量机:
然后将中间的平面(也可以是分离平面或超平面)往左平移,当第一次经过一个数据点的时候,就不能再平移了,算是达到了最大的限度,意思就是如果再平移,将有点在该平移平面的右侧,将达不到分离的效果了。当把中间的这个平面往右平移经过同样的步骤,这样就又得到了两个支持平面(这里暂且这样叫),这时的效果如下:
支持向量机给出的标准是:当两个支持平面中间的距离达到最大值,那么就认为中间的分离平面是最好的,也就是中间的区域越宽,那么冗余度越大,分离的效果也就越好。但是要注意我们要求的不是两个支持平面,而是中间的分离平面。而中间的分离平面刚好和两边的支持平面的距离是相等的,即是在中间位置。
就是这种效果,黄色是所谓的隔离地带,两边的是支持平面,在支持平面上的点是支持向量,而我们要求的就是这些个支持向量,求支持向量的算法就是支持向量机,但右边的支持向量是两个,一般应该是一个,这里可能也是一种巧合的情况。下面就要求中间的分离平面。
中间的分离平面:
其中
既是其几何意义。
现在求
此时可以通过取适当的
两个支持平面的距离d的推到为:
2. 转换为凸优化问题:
从上式可以看出约束有很多,和训练集的个数相同,
而解决凸优化问题的方法是拉格朗日乘子法:
为什么求极值问题变成了求偏导的问题,例如:
最下面的是梯度
3. 转化为拉格朗日乘子法的问题
拉格朗日乘子法的几何解释:
从上图可以看出约束是在二维平面上,而要求的极值是三维的,这时就要用到等高线来求,用一个平面去切
看下图:
可以看出此时在切点处的蓝色箭头代表
理论推导:
注意:上述的推倒是在约束是等式的情况下。
而对于不等式约束的KKT,这里可以简单理解为拉格朗日乘子法的推广。
4. 进一步转化为对偶问题
对于等式约束的拉格朗日函数,可以通过求偏导等于零,还有其它的条件联合求解得到极值,而对于KKT条件的问题,此时还不能求解,但可以进一步简化为:
代入后得到新的拉格朗日函数:
此时只剩下拉格朗日乘子和样本向量,而样本向量又是已知的,此时只剩下求解拉格朗日系数了,这称为原拉格朗日的对偶问题,可以看出对偶问题的形式更简洁了,只涉及内积,所以更有利于求解核函数的问题。而且中间的计算只涉及支持向量,所以计算规模很小。
对偶后的凸优化问题为:
此时要求解的拉格朗问题多了约束,而原拉格朗日问题可以通过求导代入变为没有约束的求极值,而现在的问题看来明显复杂了些,具体的求解算法后面再说。
5. 松弛变量和惩罚函数
其中要注意的是
线性不可分问题的最后对偶问题:
和前面一样由凸优化问题变为拉格朗日乘子法,再变为对偶问题。
在有松弛变量的情况下,问题描述差别很大,但转化为对偶后每一个拉格朗日乘子就仅仅多了一个上界。
5. SMO算法求解对偶问题
算法基本思想是每次只更新两个乘子,迭代获得最终解。
既是:
(1)每次按照一定的规则抽出两个乘子,其余的赋给初值,假如抽出的是
(2)然后重复上面的过程按照一定的规则抽取两个乘子,假如是
(3)迭代循环上述的过程,直到随便抽出两个乘子,它俩的值都不怎么变化了,停止循环。此时也就得到了所有的乘子的值。
在循环过程中为什么留下两个变量,其余的变量赋值,原因很简单,就是通过约束条件,选两个变量其实只有一个自由度。
求解的过程:
现在是其中两个变量未知,其余的变量已知,目标函数是一个二元二次函数,但通过约束条件其中一个变量可以由另一个变量表示出来,代入目标函数后,很明显,目标函数变为一个只含一个变量的一元二次函数,也就是类似于抛物线的函数。既是求抛物线的极值问题,但根据约束条件此极值点可能有三种情况:极值点的点、左边界点和右边界点这三个点,这也就是为什么在SMO的代码中会有约束边界点的判别。
而其中乘子对的选择会用到启发式:
所谓的启发式:就是说在数学上不一定有严格的推倒,但是日常的经验显示往往有很好的效果。
怎么启发的呢?现在我们已经知道
核函数
1. 非线性映射到高维空间:
在线性不可分的情况下,支持向量机首先在低维空间中完成计算,然后通过核函数将输入空间映射到高维特征空间,最终在高维特征空间中构造出最优分离超平面,从而把平面上本身不好分的非线性数据分开。如下图,上面的一堆数据在二维空间无法划分,下面映射到三维空间里则可以划分:
另一种解释:
可以看出从xoy平面映射到xyz平面后,用黄色平面就可以把样本点分开了。
2. 维数灾难
原先低维空间的问题,通过映射函数
这时主要的问题就变成了在高维空间里的计算问题,维数灾难就是关键,这时核函数就发挥重大作用了。
核函数形式化定义,如果原始特征内积是
到这里,我们可以得出结论,如果要实现该节开头的效果,只需先计算
先看一个例子,假设x和z都是n维的;
展开后,得
这个时候发现我们可以只计算原始特征x和z内积的平方(时间复杂度是
现在看一下映射函数(n=3时),根据上面的公式,得到
也就是说核函数
从上面的例子可以看出在低维空间中计算核函数的值就相当于在高维空间中计算映射后的内积。
这时就有一种想法假如对任何的映射
现在有一定理:可以先在低维空间里找一个合理的核函数k,在此基础上可以构造映射,此映射完全可以达到要求的一种效果,并且k就是
Mercer定理:
如果函数K是
Mercer定理表明为了证明K是有效的核函数,那么我们不用去寻找
来看一种常用的核函数,高斯核函数:
这时,如果x和z很相近(
既然高斯核函数能够比较x和z的相似度,并映射到0到1,回想logistic回归,sigmoid函数可以,因此还有sigmoid核函数等等。
下面有张图说明在低维线性不可分时,映射到高维后就可分了,使用高斯核函数。
核函数可以理解为描述投影样本向量的相似度:数学原理其实就是逼近,就像在高数中可以用泰勒级数展开,用幂函数展开来逼近任意一个函数,或者用傅里叶级数展开来逼近任何一个周期函数。
核函数不仅仅用在SVM上,但凡在一个模型后算法中出现了
在拉格朗日函数中使用核函数简化:
现在就可以用SMO算法继续求解了。
注意,使用核函数后,怎么分类新来的样本呢?线性的时候我们使用SVM学习出w和b,新来样本x的话,我们使用
只需将
经历了一番折腾,先总结到这,比较粗糙,有理解错误的地方,请大神指出。
参考: http://www.cnblogs.com/jerrylead/archive/2011/03/18/1988406.html
机器学习视频 讲师 黄志洪
- 支持向量机的理解
- 支持向量机的理解
- 支持向量机的理解
- 理解支持向量机
- [转] 支持向量机SVM的理解
- 支持向量机的自我理解
- 支持向量机松弛变量的理解
- 支持向量机基本原理的直观理解
- 深入理解支持向量机
- SVM(支持向量机)的三层理解
- [数学模型]支持向量机 从应用的角度理解 (一)
- 简单理解支持向量机SVM的方法
- 理解SVM的三层境界-支持向量机通俗导论
- 理解SVM的三层境界-支持向量机通俗导论
- 理解SVM的三层境界-支持向量机通俗导论
- SVM-支持向量机算法的深入理解
- 逻辑回归、决策树和支持向量机的直观理解
- 理解SVM的三层境界-支持向量机通俗导论
- PythonStock(10):使用notebook + tushare + pandas 简单的股票分析,蜡烛图
- 几种离散随机变量
- 异常问题集合<第一讲>
- ipython开发工具Jupyter Notebook安装
- opencv学习笔记(五)重映射及仿射变换
- 支持向量机的理解
- HDU 2055 An easy problem(关于这道题中的一些小问题希望大家了解)
- 开发微信公众号遇到的一些问题
- 数据库日期格式转换
- hadoop运行在kylin(ubuntu)上,造成ssh断开,机器中断
- vector按存储的结构体的某一字段排序
- Android Android自定义的下拉列表框控件
- 飞翔的小鸟
- 【网络编程】深入理解TCP的工作机制详解