python计算核函数 核函数 python( 四 )


软间隔说的是,不存在一个平面可以把样本完全正确无误的分开,因此呢允许一些样本被分错,怎么做呢就是加入松弛变量,因为希望分错的样本越小越好,因此松弛变量也有约束条件 。加入松弛变量后,问题就变为线性可分了 , 因为是每一个样本都线性可分,因此松弛变量是针对样本的,每一个样本都对应一个不同的松弛变量 。
其实感知机说白了就是找到一条直线把样本点分开,就是上方都是一类,下方是另一类 。当然完全分开是好事 , 往往是不能完全分开的,因此就存在一个损失函数,就是误分类点到这个平面的距离最短:
这里啰嗦一句 , 误分类点y*(wx+b)0,所以加个负号在前边 。
一般情况下||w||都是可以缩放,那么我们把它缩放到1,最后的目标函数就变成了
间隔就是距离,我们假设分离超平面为,那么样本点到这个平面的距离可以记为。我们都知道通过感知机划分的点,超平面上方的点,下方的点,然后通过判断的值与y的符号是否一致来判断分类是否正确 。根据这个思路函数间隔定义为:
支持向量的定义来源于几何间隔,几何间隔最直接的解释是离分隔超平面最近点的距离,其他任何点到平面的距离都大于这个值,所以几何间隔就是支持向量 。然后呢同样道理,w和b是可以缩放的,所以定义支持向量满足如下条件:
再通俗一点说,支持向量是一些点,这些点到分隔平面的距离最近,为了便于表示,把他们进行一下缩放计算,让他们满足了wx+b=+-1.
核函数是支持向量机的核心概念之一,它存在的目的就是将维度转换之后的计算简化 , 达到减少计算量的目的 。我们都知道支持向量机求的是间距最大化,通常情况下我们求得的alpha都等于0,因此支持向量决定了间距最大化程度 。
核函数的形式是这样的
其中x(i)和x(j)都是向量,他们两个相乘就是向量内积,相乘得到一个数 。刚才说了目标函数一般只和支持向量有关,因此在做核函数计算之前,实际就是选择的支持向量进行计算 。
这个写完下面得再补充
我们知道了支持向量的概念,那么支持向量机的目标函数是要使这两个支持向量之间的距离尽可能的远,因为这样才能更好地把样本点分开,当然支持向量也要满足最基本的约束条件,那就是分类正确,还有就是其他点到分隔平面的距离要大于等于支持向量到分隔平面的距离 。
【python计算核函数 核函数 python】 这种凸优化问题都可以通过拉格朗日算子进行优化,就是把约束条件通过拉格朗日系数放到目标函数上 。这部分基础知识,就是拉格朗日算法可以将等式约束和不等式约束都加到目标函数上,完成求解问题的转换 , 但是要满足一些约束条件,也就是我们后边要说的kkt条件 。
这里有个细节就是转换时候的加减号问题,这个和目标函数还有约束的正负号有关 。一般这么理解,就是求最小化问题时候,如果约束是大于0的 , 那么拉个朗日算子可以减到这一部分 , 这样一来目标函数只能越来越小,最优解就是约束为0的时候 , 这个时候和没有约束的等价,再求最小就是原问题了 。
这里是最小化问题,直接减掉这部分约束,然后后半部分永远大于等于0所以这个式子的值是要小于原来目标函数值的 。我们知道当x满足原问题的约束条件的时候,最大化L就等于那个原目标函数 。所以我们可以把这个问题转化为:
把它带回去原来的目标函数中,整理一下 。
这个时候只要求最优的α,就可以求出w和b了 。我们上边做了那么一堆转换,这个过程要满足一个叫做kkt条件的东西,其实这个东西就是把一堆约束条件整理到一起 。

推荐阅读