SVM参数选择


9

是否有更好的替代方法来选择C和Gamma,从而产生更好的训练效果?

Answers:


5

网格搜索速度很慢,因为它花费大量时间来研究无法达到最佳效果的超参数设置。更好的解决方案是Nelder-Mead单纯形算法,该算法不需要计算梯度信息,并且易于实现(Wikipedia页面上应该有足够的信息)。Weka工具箱中可能还包含一些Java代码,但是我在MATLAB中工作,并且没有对Weka进行任何详细的介绍。

SMO是用于查找模型参数而不是超参数的算法。


您能否提供您的matlab实现?
Zach

1
这里有一个theoval.cmp.uea.ac.uk/matlab/#optim,但是如果您已经拥有优化工具箱,则fminsearch也是Nelder-Mead方法IIRC的实现。
Dikran有袋动物

5

Nelder-Mead单纯形法可以包含与简单网格搜索一样多的函数求值。通常,误差表面在接近最佳参数值的情况下足够光滑,以至于粗网格搜索之后在较小区域中进行细网格搜索就足够了。

如果您对C和gamma的基于梯度的优化感兴趣,可以使用诸如优化半径边界或优化验证集错误率之类的方法。目标函数梯度的计算涉及一个SVM序列,但简单的梯度下降可能仅涉及几十次迭代。(请参阅http://olivier.chapelle.cc/ams/以获得文章和Matlab实现。)


以我的经验,纳尔德·米德通常比网格搜索更快,而梯度下降只是稍微快一点,因为它需要较少的迭代,计算梯度的成本很高。因此,如果您有一个提供梯度下降的实现,则可以使用它,但是Nelder-Mead可能不会落后。当然,一旦您具有两个以上的超参数来调整网格搜索,立即就会成为最慢的方法。看到对每种方法的比较效率的研究将会很有趣。
Dikran有袋动物2011年

没错,如果参数数量超过几个,则网格搜索是不可行的。但是Nelder-Mead也是如此,因为单纯形的大小取决于维数。
Innuo 2011年

仅在与梯度下降相同的程度上,为问题添加一个额外的维度只会为单纯形增加一个额外的点,因此像梯度下降一样,它在超参数的数量上大致线性缩放。我已经将它用于40多个超参数的问题,并且它仅比梯度下降稍微慢一点(尽管有这么多超参数,您倾向于以任何一种方式过度拟合模型选择)。
Dikran有袋动物2011年

0

这是Alex Smola博客中与您的问题相关的条目

这是一个报价:

从您的数据集中随机选择1000对(x,x'),计算所有这些对的距离,并取中位数,0.1和0.9分位数。现在,选择λ作为这三个数字的任意一个的倒数。进行一点交叉验证,您将确定三个最好的哪个。在大多数情况下,您无需进一步搜索。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.