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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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