python实现核函数的简单介绍( 五 )


再通俗一点说 , 支持向量是一些点,这些点到分隔平面的距离最近 , 为了便于表示,把他们进行一下缩放计算,让他们满足了wx+b=+-1.
核函数是支持向量机的核心概念之一,它存在的目的就是将维度转换之后的计算简化,达到减少计算量的目的 。我们都知道支持向量机求的是间距最大化,通常情况下我们求得的alpha都等于0,因此支持向量决定了间距最大化程度 。
核函数的形式是这样的
其中x(i)和x(j)都是向量,他们两个相乘就是向量内积,相乘得到一个数 。刚才说了目标函数一般只和支持向量有关,因此在做核函数计算之前,实际就是选择的支持向量进行计算 。
这个写完下面得再补充
我们知道了支持向量的概念,那么支持向量机的目标函数是要使这两个支持向量之间的距离尽可能的远,因为这样才能更好地把样本点分开,当然支持向量也要满足最基本的约束条件,那就是分类正确 , 还有就是其他点到分隔平面的距离要大于等于支持向量到分隔平面的距离 。
这种凸优化问题都可以通过拉格朗日算子进行优化,就是把约束条件通过拉格朗日系数放到目标函数上 。这部分基础知识,就是拉格朗日算法可以将等式约束和不等式约束都加到目标函数上 , 完成求解问题的转换,但是要满足一些约束条件,也就是我们后边要说的kkt条件 。
这里有个细节就是转换时候的加减号问题,这个和目标函数还有约束的正负号有关 。一般这么理解,就是求最小化问题时候,如果约束是大于0的,那么拉个朗日算子可以减到这一部分,这样一来目标函数只能越来越?。?最优解就是约束为0的时候,这个时候和没有约束的等价,再求最小就是原问题了 。
这里是最小化问题,直接减掉这部分约束,然后后半部分永远大于等于0所以这个式子的值是要小于原来目标函数值的 。我们知道当x满足原问题的约束条件的时候,最大化L就等于那个原目标函数 。所以我们可以把这个问题转化为:
把它带回去原来的目标函数中,整理一下 。
这个时候只要求最优的α,就可以求出w和b了 。我们上边做了那么一堆转换,这个过程要满足一个叫做kkt条件的东西,其实这个东西就是把一堆约束条件整理到一起 。
(1)原有问题的可行性,即h(x )=0,g(x )0
放到这里就是:
SMO算法的核心思想是求出最优化的α,然后根据之前推导得到的w,b,α之间的关系计算得到w和b , 最后的计算公式是:
现在的问题就是怎么求α了 。
SMO算法总共分两部分,一部分是求解两个α的二次规划算法,另一部分是选择两个α的启发式算法 。
先说这个选择α的启发式算法部分:大神可以证明优先优化违反kkt条件的α可以最快获得最优解 , 至于咋证明的,就先不看了 。
在讲支持向量机的求解算法时候,直接给出了核函数K,那么怎么去理解核函数呢 。核函数的作用是解决样本点在高维空间的内积运算问题,怎么理解呢,通常的分类问题都是有很多个特征的,然后为了达到现线性可分 , 又会从低维映射到高维,样本量再一多计算量非常大,因此先通过函数进行一个转换 , 减少乘法的计算量 。
要理解核函数,先理解内积运算,内积运算实际是两个向量,对应位置相乘加和,比如我有x1 = [v1,v2], x2=[w1,w2],那么x1和x2的内积计算方法就是:v1w1+v2w2 。
如果上面那种情况线性不可分 , 需要到高维进行映射,让数据变得线性可分,然后数据变为五维的,即v1 2+v2 2+v1+v2+v1v2,然后再进行一次内积计算,数据变为。

推荐阅读