• 机器学习之支持向量机(三):核函数和KKT条件的理解


    注:关于支持向量机系列文章是借鉴大神的神作,加以自己的理解写成的;若对原作者有损请告知,我会及时处理。转载请标明来源。

    序:

    我在支持向量机系列中主要讲支持向量机的公式推导,第一部分讲到推出拉格朗日对偶函数的对偶因子α;第二部分是SMO算法对于对偶因子的求解;第三部分是核函数的原理与应用,讲核函数的推理及常用的核函数有哪些;第四部分是支持向量机的应用,按照机器学习实战的代码详细解读。

    机器学习之支持向量机(一):支持向量机的公式推导

    机器学习之支持向量机(二):SMO算法

    机器学习之支持向量机(三):核函数和KKT条件的理解

    机器学习之支持向量机(四):支持向量机的Python语言实现

    1 核函数

    1.1 核函数的定义

    设χ是输入空间(欧氏空间或离散集合),Η为特征空间(希尔伯特空间),如果存在一个从χ到Η的映射 

    φ(x): χ→Η

    使得对所有的x,z∈χ,函数Κ(x,z)=φ(x)∙φ(z), 则称Κ(x,z)为核函数,φ(x)为映射函数,φ(x)∙φ(z)为x,z映射到特征空间上的内积。

    由于映射函数十分复杂难以计算,在实际中,通常都是使用核函数来求解内积,计算复杂度并没有增加,映射函数仅仅作为一种逻辑映射,表征着输入空间到特征空间的映射关系。至于为什么需要映射后的特征而不是最初的特征来参与计算,为了更好地拟合是其中一个原因,另外的一个重要原因是样例可能存在线性不可分的情况,而将特征映射到高维空间后,往往就可分了。

    1.2 核函数的计算原理

    将核函数形式化定义,如果原始特征内积是clip_image014[4],映射后为clip_image016[6],那么定义核函数(Kernel)为

    到这里,我们可以得出结论,如果要实现该节开头的效果,只需先计算clip_image020[10],然后计算clip_image022[10]即可,然而这种计算方式是非常低效的。比如最初的特征是n维的,我们将其映射到clip_image024[6]维,然后再计算,这样需要clip_image026[6]的时间。那么我们能不能想办法减少计算时间呢?

    先看一个例子,假设x和z都是n维的,

    展开后,得:

    这个时候发现我们可以只计算原始特征x和z内积的平方(时间复杂度是O(n)),就等价与计算映射后特征的内积。也就是说我们不需要花clip_image026[7]时间了。

    现在看一下映射函数(n=3时),根据上面的公式,得到

    也就是说核函数clip_image033[4]只能在选择这样的clip_image004[11]作为映射函数时才能够等价于映射后特征的内积。

    再看另外一个核函数,高斯核函数:

    这时,如果x和z很相近(clip_image044[6]),那么核函数值为1,如果x和z相差很大(clip_image046[6]),那么核函数值约等于0。由于这个函数类似于高斯分布,因此称为高斯核函数,也叫做径向基函数(Radial Basis Function 简称RBF)。它能够把原始特征映射到无穷维。

    下面有张图说明在低维线性不可分时,映射到高维后就可分了,使用高斯核函数。

    注意,使用核函数后,怎么分类新来的样本呢?线性的时候我们使用SVM学习出w和b,新来样本x的话,我们使用clip_image050[8]来判断,如果值大于等于1,那么是正类,小于等于是负类。在两者之间,认为无法确定。如果使用了核函数后,clip_image050[9]就变成了clip_image052[6],是否先要找到clip_image054[8],然后再预测?答案肯定不是了,找clip_image054[9]很麻烦,回想我们之前说过的。

    只需将clip_image057[4]替换成clip_image059[6],然后值的判断同上。

    1.3 核函数有效性的判定

    问题:给定一个函数K,我们能否使用K来替代计算clip_image022[11],也就说,是否能够找出一个clip_image061[12],使得对于所有的x和z,都有clip_image018[9]?即比如给出了clip_image063[8],是否能够认为K是一个有效的核函数。

    下面来解决这个问题,给定m个训练样本clip_image065[6],每一个clip_image067[8]对应一个特征向量。那么,我们可以将任意两个clip_image067[9]clip_image069[6]带入K中,计算得到clip_image071[6]。i 可以从1到m,j 可以从1到m,这样可以计算出m*m的核函数矩阵(Kernel Matrix)。为了方便,我们将核函数矩阵和clip_image073[10]都使用K来表示。如果假设K是有效地核函数,那么根据核函数定义:

    可见,矩阵K应该是个对称阵。让我们得出一个更强的结论,首先使用符号clip_image077[6]来表示映射函数clip_image020[12]的第k维属性值。那么对于任意向量z,得:

    最后一步和前面计算clip_image063[9]时类似。从这个公式我们可以看出,如果K是个有效的核函数(即clip_image073[11]clip_image080[6]等价),那么,在训练集上得到的核函数矩阵K应该是半正定的(clip_image082[6])。这样我们得到一个核函数的必要条件:K是有效的核函数 ==> 核函数矩阵K是对称半正定的。

     

    Mercer定理表明为了证明K是有效的核函数,那么我们不用去寻找clip_image061[13],而只需要在训练集上求出各个clip_image086[6],然后判断矩阵K是否是半正定(使用左上角主子式大于等于零等方法)即可。

    1.4 常见的核函数

    1 线性核函数

    线性内核是最简单的内核函数。 它由内积<x,y>加上可选的常数c给出。 使用线性内核的内核算法通常等于它们的非内核对应物,即具有线性内核的KPCA与标准PCA相同。

    表达式 :

    2 多项式核函数

    多项式核是非固定内核。 多项式内核非常适合于所有训练数据都归一化的问题。

    表达式:k(x,y)=(αx T y + c)d

    可调参数是斜率α,常数项c和多项式度d。

    3 高斯核函数

    高斯核是径向基函数核的一个例子。

    或者,它也可以使用来实现

    可调参数sigma在内核的性能中起着主要作用,并且应该仔细地调整到手头的问题。 如果过高估计,指数将几乎呈线性,高维投影将开始失去其非线性功率。 另一方面,如果低估,该函数将缺乏正则化,并且决策边界将对训练数据中的噪声高度敏感。

     4 指数的内核

    指数核与高斯核密切相关,只有正态的平方被忽略。 它也是一个径向基函数内核。

    表达式:

     5 拉普拉斯算子核

    拉普拉斯核心完全等同于指数内核,除了对sigma参数的变化不那么敏感。 作为等价的,它也是一个径向基函数内核。

    表达式:

    重要的是注意,关于高斯内核的σ参数的观察也适用于指数和拉普拉斯内核。

     2 KKT 条件

    KKT条件是解决最优化问题的时用到的一种方法。我们这里提到的最优化问题通常是指对于给定的某一函数,求其在指定作用域上的全局最小值。提到KKT条件一般会附带的提一下拉格朗日乘子。对学过高等数学的人来说比较拉格朗日乘子应该会有些印象。二者均是求解最优化问题的方法,不同之处在于应用的情形不同。有三种情况:无约束条件,等式约束条件,不等式约束条件。

    2.1 无约束条件

    这是最简单的情况,解决方法通常是函数对变量求导,令求导函数等于0的点可能是极值点。将结果带回原函数进行验证即可。

    2.2 等式约束条件

    设目标函数为f(x),约束条件为hk(x),l 表示有 l 个约束条件,如:

    则解决方法是消元法或者拉格朗日法。消元法比较简单不在赘述,拉格朗日法这里在提一下,因为后面提到的KKT条件是对拉格朗日乘子法的一种泛化。

    定义拉格朗日函数F(x) :

    其中λk是各个约束条件的待定系数。

    然后解变量的偏导方程:

    2.3 不等式约束条件

     设目标函数f(x),不等式约束为g(x),添加上等式约束条件h(x)。此时的约束优化问题描述如下:

     则我们定义不等式约束下的拉格朗日函数L,则L表达式为:

     其中 f(x) 是原目标函数,hj(x) 是第j个等式约束条件,λ是对应的约束系数,g是不等式约束,u是对应的约束系数。

      此时若要求解上述优化问题,必须满足下述条件(也是我们的求解条件):

     这些求解条件就是KKT条件。(1)是对拉格朗日函数取极值时候带来的一个必要条件,(2)是拉格朗日系数约束(同等式情况),(3)是不等式约束情况,(4)是互补松弛条件,(5)、(6)是原约束条件。

          对于一般的任意问题而言,KKT条件是使一组解成为最优解的必要条件,当原问题是凸问题的时候,KKT条件也是充分条件。

    2.4 举例说明

     现有如下不等式约束优化问题:

    此时引入松弛变量可以将不等式约束变成等式约束。设a1和b1为两个松弛变量,则上述的不等式约束可写为:

    则该问题的拉格朗日函数为:

    根据拉格朗日乘子法,求解方程组:

    同样 μ2b1=0,来分析g2(x)起作用和不起作用约束。

    于是推出条件:

    搞了一天把支持向量机的前三篇写完了,肯定是写的不足,鉴于SVM难度大和本人的水平有限,只能做到这样了。不足的地方请各位博友多多指教,第四部分的支持向量机的应用,是根据机器学习实战一步步实现,会给出详细的代码介绍。

    机器学习之支持向量机(一):支持向量机的公式推导

    机器学习之支持向量机(二):SMO算法

    机器学习之支持向量机(三):核函数和KKT条件的理解

    机器学习之支持向量机(四):支持向量机的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

  • 相关阅读:
    SELFJOIN
    lLinux编程大全
    一个基础但是隐晦的c++语法问题
    cocos2dx内存优化
    iOS和android游戏纹理优化和内存优化(cocos2dx)
    STL学习小结
    C++11
    游戏资源打包
    C++ '__FILE__' and '__LINE__
    Cocos2dx纹理优化的一些方案
  • 原文地址:https://www.cnblogs.com/pursued-deer/p/7858122.html
Copyright © 2020-2023  润新知