libsvm 收缩启发式

我在使用 libsvm 的 C-SVC 模式,并使用二次多项式核函数,需要训练多个 SVM。在训练过程中,我发现有些 SVM 会出现以下一个或两个警告:

WARNING: using -h 0 may be faster*WARNING: reaching max number of iterationsoptimization 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 / 特征数)可能不是最佳选择。尽管如此,从我的实验来看,你可能不希望 gamma 值太大,因为这会导致数值问题(我尝试的最大值为 8)。

关于 gamma 和 C 的可能值的进一步启发,可以尝试查看 grid.py。


回答:

收缩启发式是为了加速优化。正如 FAQ 中所说,它们有时有帮助,有时没有。我认为这更多是运行时间的问题,而不是收敛的问题。

然而,优化达到最大迭代次数这一事实很有趣。你可能需要调整容忍度(成本参数),或者查看导致此问题的具体问题。数据集是否很大?

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注