SVM序列最小优化收敛性问题

Amo*_*shi 2 smo classification machine-learning convex-optimization svm

我已经在支持向量机上工作了大约2个月了.我自己编写了SVM编码,对于SVM的优化问题,我使用了John Platt博士的Sequential Minimal Optimization(SMO).

现在我正处于我要进行网格搜索以找到我的数据集的最佳C值的阶段.(请在此处查找我的项目应用程序和数据集详细信息的详细信息SVM分类 - 每个类的最小输入集数量)

我已经成功检查了我自定义实现的SVM的精度,C值范围从2 ^ 0到2 ^ 6.但是现在我遇到了关于C> 128的SMO收敛的一些问题.就像我试图找到C = 128的alpha值一样,它在实际收敛并成功给出alpha值之前需要很长时间.

对于C = 100,SMO收敛所花费的时间约为5小时.这个巨大的我认为(因为SMO应该很快.)虽然我的准确度很高?我被搞砸了,因为我不能测试更高C值的准确性.

我实际上显示了SMO每次传递中更改的alpha数,并且让10,13,8 ... alphas不断变化.KKT条件确保收敛,所以这里发生了什么奇怪的事情?

请注意,虽然执行时间很长,但我的实现在C <= 100时工作正常且准确性很高.

请给我关于这个问题的意见.

谢谢你和干杯.

dmc*_*cer 5

对于大多数SVM实现,培训时间可以随着C值的增大而显着增加.为了了解SMO在相当好的实现中的训练时间与C的比例,请在下图中查看libSVM的对数比例行. .

SVM训练时间与C - 来自Sentelle等人的快速修正单纯形法SVM训练方法.

alt text http://dmcer.net/StackOverflowImages/svm_scaling.png

你可能有两种简单的方法,一种不是那么简单的方法来加快速度.

让我们从简单的东西开始吧.首先,您可以尝试放松收敛标准.像epsilon = 0.001这样的严格标准需要花费更长的时间进行训练,而通常会导致模型不比像epsilon = 0.01这样的宽松标准更好.其次,您应该尝试分析您的代码,看看是否存在任何明显的瓶颈.

不太容易解决的问题是切换到不同的优化算法(例如,上面Sentelle等人的论文中的SVM-RSQP).但是,如果你有一个SMO的工作实现,你应该只是真的这样做作为最后的手段.