Jack-Cherish/Machine-Learning

关于SMO算法想请教您几个问题?

JokerDu opened this issue · 1 comments

博主您好,关于SMO算法想请教您几个问题,之前也没有实现过SVM,看了您文章叫手撕很带劲,自己又重新连推导带手撕了一下,感谢感谢~
(1)之前问您的支持向量到超平面间隔应该相等的问题,因为我实现的结果和您的差不多,间隔看起来也不相等,我输出了自己模型的预测结果,每个支持向量到超平面距离也确实不相等,差别还很大,我也clone了您的SMO代码,输出了间隔如下:
(margin, label, example):
-1.973460528 -1.0 [3.542485, 1.977398]
-1.38201380007 -1.0 [2.114999, -0.004466]
5.08844420727 1.0 [8.127113, 1.274372]
-2.43899604116 -1.0 [4.658191, 3.507396]
5.08764339399 1.0 [8.197181, 1.545132]
4.85883569251 1.0 [7.40786, -0.121961]
4.58800136353 1.0 [6.960661, -0.245353]
3.8990174816 1.0 [6.080573, 0.418886]
-1.8990174816 -1.0 [3.107511, 0.758367]
间隔不等,超过容错率了,这一点没想通。
(2)eta=K11+K22-2K12,原SMO文章在eta<=0以后计算的是边界的目标函数值,不知道为什么eta<=0时alpha在边界上?
(3)我觉得在主while循环内部应该定义alphaPairsChanged = 0,加上后测试的代码只需要迭代3次。

首先,感谢支持~
(1)这个不仅有容错率,还有软间隔C。我没有实际测试,但是感觉这个是影响的地方,不知道如何下手,如果有什么好测试办法。其实,我也在思考这个问题。如果有进展,还望赐教。
(2)-eta是目标函数的二阶偏导。-eta<=0,说明一阶导数没有最小值,就不做任何改变,本次循环结束直接运行下一次for循环。eta<=0时,alpha在边界上?原文是这么用的?
(3)这个是我少写了,现在就改。