关于SMO算法的一点点认识

最近在学习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是零。这也是错误的情况之一。

这个我还没想好怎么证明,以后我会补上来。还请大家多多指点额。


评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值