您的位置:首页 > 其它

关于SMO算法的一点点认识

2015-11-11 18:19 274 查看
最近在学习SVM时,对于SMO代码(代码源自《机器学习实战》)中判断是否需要优化alpha[i]不太理解。

挣扎了一番,说说自己小小的见解。

也希望大神们能指导一下。

SMO是一种启发式同时优化两个alpha值的算法。

过程中会先选择一个alpha[i]先判断是否需要优化之然后再选择另外一个alpha[j]。

而判断的代码大概是这样的:

if ((labelMat[i] * Ei < -toler) and (alphas[i] < C)) or ((labelMat[i] * Ei > toler) and (alphas[i] > 0)):
                # coding


判断条件翻译成公式就是:



两个条件能否成立一个,如果成立则说明alpha[i]是需要优化的。

在我的理解中对于SVM划分的区域可以看成三个个部分a区域,b区域,和作为支持向量的蓝线区域:



对应起来在a区域的点,其alpha值是等于C的。b区域的点alpha值为0。而恰好在蓝线上的点也就是支持向量,alpha>0。

那么对于一个点采用svm划分。它被划错就有两种情况:

1.该点属于b区域,其几何距离应该大于1,但是alpha>0,比如点p。

也就是公式中第一个判别条件。

2.该点属于a区域,其几何距离应该是c,但是alpha<c,不如点q。

公式中第二个判别条件。

对于这两种划错情况,其alpha值都是有必要优化的。所以也就有了代码中,对应的判断条件。

那么问题来了,有没有一种情况



发生呢。

因为这种情况下xi在支持向量上但是其对应的alpha是零。这也是错误的情况之一。

这个我还没想好怎么证明,以后我会补上来。还请大家多多指点额。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: