我在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的网格搜索技术实现交叉验证,因为在这种情况下在这种情况下,伽玛的默认值(1 / number_of_features)可能不是最佳选择。不过,根据我的实验,您可能不希望伽玛太大,因为它会引起数值问题(我正在尝试将其最大值设为8)。

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

最佳答案

不断缩小的启发式方法可以加快优化速度。就像在FAQ中说的那样,它们有时会有所帮助,有时却没有帮助。我认为这是运行时问题,而不是收敛问题。

不过,优化达到最大迭代次数这一事实很有趣。您可能需要考虑公差(成本参数),或查看引起此公差的各个问题。数据集很大吗?

关于machine-learning - libsvm收缩启发式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12500261/

10-12 23:09