我正在使用带有二次多项式核函数的libsvm进行C-SVC模式训练,并且需要训练多个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 / 特征数)可能不是最佳选择。尽管从我的实验中得知,您可能不希望gamma太大,因为它会导致数值问题(我正在尝试将其最大值设为8)。
对于gamma和C的其他可能值的启示,可以尝试在grid.py中进行探索。
svm-scale
的工具来实现此目的。请参见此处。 - Mihai Todor