我已经在支持向量机上工作了大约 2 个月了。我自己编写了 SVM,对于 SVM 的优化问题,我使用了 John Platt 博士的序列最小优化(SMO)。
现在我正处于进行网格搜索以找到我的数据集的最佳 C 值的阶段。(请在此处找到我的项目应用程序和数据集详细信息的详细信息SVM 分类 - 每个类的最小输入集数)
我已经成功检查了我自定义实现的 SVM 对从 2^0 到 2^6 的 C 值的准确性。但是现在我在 C> 128 的 SMO 收敛方面遇到了一些问题。就像我试图找到 C=128 的 alpha 值一样,它需要很长时间才能真正收敛并成功给出 alpha 值。
对于 C=100,SMO 收敛所需的时间约为 5 小时。我认为这个巨大(因为 SMO 应该很快。)虽然我得到了很好的准确性?我搞砸了,不是因为我无法测试更高 C 值的准确性。
实际上,我正在显示在 SMO 的每次传递中更改的 alpha 数量,并获得 10、13、8... alpha 连续变化。KKT 条件确保收敛,那么这里发生了什么奇怪的事情?
请注意,尽管执行时间很长,但我的实现对于 C<=100 的精度很高。
请就这个问题给我意见。
谢谢你和干杯。