@spiritnotes
2016-03-14T04:57:25.000000Z
字数 6577
阅读 2664
机器学习
算法
所谓凸函数就是指函数的开口只有一个,要么向上,要么向下。其满足如下公式
由于函数是凸的,因此可以其要么只有一个最小值,要么就只有一个最大值(取决于凸的方向),因此求解该函数最小值和最大值的时候直接求导,就是全局最优解了。例如对于如下问题
如果在刚才的问题添加上约束条件,其解又会咋样呢?正常情况下,在本题中可以通过将x2和x3用x1表示代入方程进行计算。
而应用拉格朗日乘子法,就是求解如下问题
针对f函数可以设想其等高线,而约束条件是一个平面,则其最优点即是平面与等高线相切的地方,如果是相交则其还有更小的等高线,由相切,则可知等高线和约束条件函数在该点具有相同的法向量。也即是说f的梯度与约束条件的梯度相同
如果约束条件是不等式怎么解决呢?假设有如下约束条件
那么由拉格朗日乘子法可转求该函数的最优解
假设数据的分隔面是线性的,我们采用如下分离超平面
对于二分类问题,我们需要找到一个分割点使其完整的将数据划分成两类。我们设置分割平面为
构建拉格朗日函数,引入
根据KKT条件的第一条,函数L对w/b求导为0
当 则有,数据位于边界上,为支持向量
当 则有,数据位于边界或者之外
根据上式求得最佳
对于线性不可分的数据集,则说明对于已划分好的分割超平面来说,某些点满足不了函数大于等于1的约束条件,为了解决这个问题,对于每个样本点引入一个松弛变量,这样使得函数间隔加上松弛变量大于等于1。约束条件就变为:
同时对于引入的每个松弛变量,支付一个代价,则目标函数变为
新的目标函数的拉格朗日函数如下
代入原式根据对偶问题可得
当 则分类正确
当 则有,数据位于边界上,为支持向量
当 则有,则需要根据的值进行判断
根据上式求得最佳
SMO方法是迭代方法,每次迭代调整分错的点直到收敛;在迭代过程中,会有3种点,第一种
- y(wx+b) > 1 已分对的点,其alpha为0,可以不调整
- y(wx+b) = 1 支持边界上的点
不满足条件的点:
yu <= 1 但是 alpha < C
yu >= 1 但是 alpha > 0
yu <= 1 但是 alpha = 0 或者 alpha = C
因为是求函数的最小值,核心思想是一次只在一个维度上使得函数最大化,其循环次数可能会较多,但是循环内部比较简单。由于约束存在则我们不可能一次只改变一个而满足等式,因此我们每次改变两个坐标。假设选择如下两个则有:
第一个alpha就是选择样本点最不满足KKT条件的:
第二个alpha选择的标准是希望alpha2有足够大的变化。由于alpha2是依赖于两个alhpa对应的点误差的绝对值,因此可以选择该值最大的。
Github:https://github.com/spiritwiki/codes/tree/master/svm
coding.net:https://coding.net/u/spiritwiki/p/codes/git/tree/master/svm
针对简单测试集其分类图如下