注:关于支持向量机系列文章是借鉴大神的神做,加以本身的理解写成的;若对原做者有损请告知,我会及时处理。转载请标明来源。html
我在支持向量机系列中主要讲支持向量机的公式推导,第一部分讲到推出拉格朗日对偶函数的对偶因子α;第二部分是SMO算法对于对偶因子的求解;第三部分是核函数的原理与应用,讲核函数的推理及经常使用的核函数有哪些;第四部分是支持向量机的应用,按照机器学习实战的代码详细解读。算法
机器学习之支持向量机(三):核函数和KKT条件的理解post
机器学习之支持向量机(四):支持向量机的Python语言实现性能
设χ是输入空间(欧氏空间或离散集合),Η为特征空间(希尔伯特空间),若是存在一个从χ到Η的映射 学习
φ(x): χ→Η优化
使得对全部的x,z∈χ,函数Κ(x,z)=φ(x)∙φ(z), 则称Κ(x,z)为核函数,φ(x)为映射函数,φ(x)∙φ(z)为x,z映射到特征空间上的内积。url
因为映射函数十分复杂难以计算,在实际中,一般都是使用核函数来求解内积,计算复杂度并无增长,映射函数仅仅做为一种逻辑映射,表征着输入空间到特征空间的映射关系。至于为何须要映射后的特征而不是最初的特征来参与计算,为了更好地拟合是其中一个缘由,另外的一个重要缘由是样例可能存在线性不可分的状况,而将特征映射到高维空间后,每每就可分了。spa
将核函数形式化定义,若是原始特征内积是,映射后为
,那么定义核函数(Kernel)为
到这里,咱们能够得出结论,若是要实现该节开头的效果,只需先计算,而后计算
便可,然而这种计算方式是很是低效的。好比最初的特征是n维的,咱们将其映射到
维,而后再计算,这样须要
的时间。那么咱们能不能想办法减小计算时间呢?
先看一个例子,假设x和z都是n维的,
展开后,得:
这个时候发现咱们能够只计算原始特征x和z内积的平方(时间复杂度是O(n)),就等价与计算映射后特征的内积。也就是说咱们不须要花时间了。
如今看一下映射函数(n=3时),根据上面的公式,获得
也就是说核函数只能在选择这样的
做为映射函数时才可以等价于映射后特征的内积。
再看另一个核函数,高斯核函数:
这时,若是x和z很相近(),那么核函数值为1,若是x和z相差很大(
),那么核函数值约等于0。因为这个函数相似于高斯分布,所以称为高斯核函数,也叫作径向基函数(Radial Basis Function 简称RBF)。它可以把原始特征映射到无穷维。
下面有张图说明在低维线性不可分时,映射到高维后就可分了,使用高斯核函数。
注意,使用核函数后,怎么分类新来的样本呢?线性的时候咱们使用SVM学习出w和b,新来样本x的话,咱们使用来判断,若是值大于等于1,那么是正类,小于等因而负类。在二者之间,认为没法肯定。若是使用了核函数后,
就变成了
,是否先要找到
,而后再预测?答案确定不是了,找
很麻烦,回想咱们以前说过的。
问题:给定一个函数K,咱们可否使用K来替代计算,也就说,是否可以找出一个
,使得对于全部的x和z,都有
?即好比给出了
,是否可以认为K是一个有效的核函数。
下面来解决这个问题,给定m个训练样本,每个
对应一个特征向量。那么,咱们能够将任意两个
和
带入K中,计算获得
。i 能够从1到m,j 能够从1到m,这样能够计算出m*m的核函数矩阵(Kernel Matrix)。为了方便,咱们将核函数矩阵和
都使用K来表示。若是假设K是有效地核函数,那么根据核函数定义:
可见,矩阵K应该是个对称阵。让咱们得出一个更强的结论,首先使用符号来表示映射函数
的第k维属性值。那么对于任意向量z,得:
最后一步和前面计算时相似。从这个公式咱们能够看出,若是K是个有效的核函数(即
和
等价),那么,在训练集上获得的核函数矩阵K应该是半正定的(
)。这样咱们获得一个核函数的必要条件:K是有效的核函数 ==> 核函数矩阵K是对称半正定的。
Mercer定理代表为了证实K是有效的核函数,那么咱们不用去寻找,而只须要在训练集上求出各个
,而后判断矩阵K是不是半正定(使用左上角主子式大于等于零等方法)便可。
1 线性核函数
线性内核是最简单的内核函数。 它由内积<x,y>加上可选的常数c给出。 使用线性内核的内核算法一般等于它们的非内核对应物,即具备线性内核的KPCA与标准PCA相同。
表达式 :
2 多项式核函数
多项式核是非固定内核。 多项式内核很是适合于全部训练数据都归一化的问题。
表达式:k(x,y)=(αx T y + c)d
可调参数是斜率α,常数项c和多项式度d。
3 高斯核函数
高斯核是径向基函数核的一个例子。
或者,它也可使用来实现
可调参数sigma在内核的性能中起着主要做用,而且应该仔细地调整到手头的问题。 若是太高估计,指数将几乎呈线性,高维投影将开始失去其非线性功率。 另外一方面,若是低估,该函数将缺少正则化,而且决策边界将对训练数据中的噪声高度敏感。
4 指数的内核
指数核与高斯核密切相关,只有正态的平方被忽略。 它也是一个径向基函数内核。
表达式:
5 拉普拉斯算子核
拉普拉斯核心彻底等同于指数内核,除了对sigma参数的变化不那么敏感。 做为等价的,它也是一个径向基函数内核。
表达式:
重要的是注意,关于高斯内核的σ参数的观察也适用于指数和拉普拉斯内核。
KKT条件是解决最优化问题的时用到的一种方法。咱们这里提到的最优化问题一般是指对于给定的某一函数,求其在指定做用域上的全局最小值。提到KKT条件通常会附带的提一下拉格朗日乘子。对学太高等数学的人来讲比较拉格朗日乘子应该会有些印象。两者均是求解最优化问题的方法,不一样之处在于应用的情形不一样。有三种状况:无约束条件,等式约束条件,不等式约束条件。
这是最简单的状况,解决方法一般是函数对变量求导,令求导函数等于0的点多是极值点。将结果带回原函数进行验证便可。
设目标函数为f(x),约束条件为hk(x),l 表示有 l 个约束条件,如:
则解决方法是消元法或者拉格朗日法。消元法比较简单不在赘述,拉格朗日法这里在提一下,由于后面提到的KKT条件是对拉格朗日乘子法的一种泛化。
定义拉格朗日函数F(x) :
其中λk是各个约束条件的待定系数。
而后解变量的偏导方程:
设目标函数f(x),不等式约束为g(x),添加上等式约束条件h(x)。此时的约束优化问题描述以下:
则咱们定义不等式约束下的拉格朗日函数L,则L表达式为:
其中 f(x) 是原目标函数,hj(x) 是第j个等式约束条件,λj 是对应的约束系数,gk 是不等式约束,uk 是对应的约束系数。
此时若要求解上述优化问题,必须知足下述条件(也是咱们的求解条件):
这些求解条件就是KKT条件。(1)是对拉格朗日函数取极值时候带来的一个必要条件,(2)是拉格朗日系数约束(同等式状况),(3)是不等式约束状况,(4)是互补松弛条件,(5)、(6)是原约束条件。
对于通常的任意问题而言,KKT条件是使一组解成为最优解的必要条件,当原问题是凸问题的时候,KKT条件也是充分条件。
现有以下不等式约束优化问题:
此时引入松弛变量能够将不等式约束变成等式约束。设a1和b1为两个松弛变量,则上述的不等式约束可写为:
则该问题的拉格朗日函数为:
根据拉格朗日乘子法,求解方程组:
一样 μ2b1=0,来分析g2(x)起做用和不起做用约束。
因而推出条件:
搞了一天把支持向量机的前三篇写完了,确定是写的不足,鉴于SVM难度大和本人的水平有限,只能作到这样了。不足的地方请各位博友多多指教,第四部分的支持向量机的应用,是根据机器学习实战一步步实现,会给出详细的代码介绍。
机器学习之支持向量机(四):支持向量机的Python语言实现
参考:
1 支持向量机(三)核函数 https://www.cnblogs.com/jerrylead/archive/2011/03/18/1988406.html
2 机器学习---核函数 https://www.cnblogs.com/xiaohuahua108/p/6146118.html
3 理解支持向量机(二)核函数 http://blog.csdn.net/shijing_0214/article/details/51000845
4 KKT条件介绍 http://blog.csdn.net/johnnyconstantine/article/details/46335763