17

我在 C-SVC 模式下使用带有 2 次多项式内核的 libsvm,我需要训练多个 SVM。在训练期间,对于我训练的一些 SVM,我收到了其中一个甚至两个警告:

WARNING: using -h 0 may be faster
*
WARNING: reaching max number of iterations
optimization finished, #iter = 10000000

我找到了h参数的描述:

-h shrinking : whether to use the shrinking heuristics, 0 or 1 (default 1)

我试图从 libsvm 文档中阅读解释,但这对我来说有点太高了。任何人都可以提供一个外行的解释,也许,一些像设置这样的建议会是有益的,因为......?此外,如果为我训练的所有 SVM 设置此参数,是否会对未明确给出此警告的 SVM 的准确性产生负面影响,这将很有帮助。

我不确定如何处理另一个警告。

只是为了提供更多细节:我的训练集有 10 个属性(特征),它们由 5000 个向量组成。


更新:

如果其他人得到“达到最大迭代次数”,这似乎是由数值稳定性问题引起的。此外,这将产生非常缓慢的训练时间。多项式内核确实受益于使用交叉验证技术来确定正则化的最佳值(C 参数),并且在多项式内核的情况下,对我来说,它有助于保持它小于 8。此外,如果内核是不均匀的\sum(\gamma x_i s_i + coef0)^d (抱歉,SO 不支持 LaTeX),其中 coef0 != 0,则可以使用 gamma 和 C 的网格搜索技术来实现交叉验证,因为在这个在这种情况下,gamma (1 / number_of_features) 的默认值可能不是最佳选择。不过,从我的实验来看,你可能不希望 gamma 太大,

为了进一步了解 gamma 和 C 的可能值,应该尝试在 grid.py 中戳。

4

1 回答 1

11

缩小启发式是为了加速优化。正如常见问题解答中所说,它们有时会有所帮助,有时则不会。我相信这是一个运行时间问题,而不是收敛问题。

不过,优化达到最大迭代次数的事实很有趣。您可能想要使用公差(成本参数),或者查看导致此问题的个别问题。数据集大吗?

于 2012-09-20T10:30:40.273 回答