关于SMO算法的一点点认识
2015-11-11 18:19
274 查看
最近在学习SVM时,对于SMO代码(代码源自《机器学习实战》)中判断是否需要优化alpha[i]不太理解。
挣扎了一番,说说自己小小的见解。
也希望大神们能指导一下。
SMO是一种启发式同时优化两个alpha值的算法。
过程中会先选择一个alpha[i]先判断是否需要优化之然后再选择另外一个alpha[j]。
而判断的代码大概是这样的:
判断条件翻译成公式就是:
两个条件能否成立一个,如果成立则说明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是零。这也是错误的情况之一。
这个我还没想好怎么证明,以后我会补上来。还请大家多多指点额。
挣扎了一番,说说自己小小的见解。
也希望大神们能指导一下。
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是零。这也是错误的情况之一。
这个我还没想好怎么证明,以后我会补上来。还请大家多多指点额。
相关文章推荐
- cygintl-8.dll 是cygwin的哪个包?
- linux: 可重入函数与不可重入函数
- Java动态代理一——动态类Proxy的使用
- mysql自动备份脚本
- MKL在Visual Studio 2010中配置
- Epic Games Shows Incredible New Anti-Aliasing Technique – Screenshots + Video Comparison
- Java.util.regex中matcher 和pattern的用法
- mac下filezilla中找回存储的站点秘密
- openstack平台接管vmware现有虚拟机
- git 失效
- jquery实现当页面滚动超过一屏时显示返回顶部按钮
- 泛型方法的局限及解决之道
- Android获取设备电池信息,玩些新花样
- 三元组矩阵的乘法
- 泛型方法的局限及解决之道
- 【MDCC2015】 平台与技术-Android专场总结
- memcache 分布式,算法实现
- 谈谈那些年要把你弄疯的 bug
- 前端自动化
- MongoDB的分片(9)