svm-train 其他参数优化

标签 svm libsvm

libsvm 的“grid.py”尝试仅优化 svm-train 的两个参数“c”和“g”。我想通过一次又一次地为不同的参数运行“grid.py”来扩展“grid.py”以优化其他参数(例如“r”或“d”)。我有一些问题
1. 是否已经有任何脚本可以优化“c”和“g”以外的参数?
2. 哪些参数更重要,最大/最小范围是多少。有时更改/优化一个参数会自动优化其他参数。 svm-train 参数是这样吗?

最佳答案

据我所知,没有执行此操作的脚本,但是我不明白为什么不能轻松扩展 grid.py 以执行此操作。但是,我认为这不值得付出努力。

首先,您需要选择内核。这本身就是一个参数。每个内核都有一组不同的参数,并且会以不同的方式执行,因此为了比较内核,您必须优化每个内核的参数。

C、cost参数是一个适用于SVM本身的整体参数。其他参数都是核函数的输入。 C 控制宽边界和更多错误分类的训练点(但模型可以更好地泛化到 future 数据)和窄边界之间的权衡,后者更好地拟合训练点但可能过度拟合训练数据。

通常,使用最广泛的两种内核是线性(不需要参数)和 RBF 内核。

RBF 内核采用 gamma 参数。这个必须优化,它的值会显着影响性能。

如果您使用多项式内核,d 是主要参数,您将对其进行优化。从默认值修改其他参数没有意义,除非您有一些数学原因为什么这样做更适合您的数据。根据我的经验,多项式内核可以给出很好的结果,但是在计算成本巨大的 RBF 内核上,如果有任何增加的话,它会产生微不足道的增加。

与 sigmoid 内核类似,gamma 是你的主要参数,优化它并将 coef0 保留为默认值,除非你很好地理解为什么这更适合你的数据。

所以 grid.py 之所以不优化其他参数,是因为在大多数情况下它根本没有必要,通常不会导致性能提升。至于你的第二个问题:不,这不是优化一个会优化另一个的情况。这些参数的最佳值特定于您的数据集。改变核参数的值会影响C的最优值。这就是推荐网格搜索的原因。将这些额外的参数添加到您的搜索中将显着增加所需的时间,并且不太可能提高分类器的性能。

关于svm-train 其他参数优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10385550/

相关文章:

Java、weka LibSVM 预测不正确

python - grid.py 没有给出输出

python - 带 SVC 的 OneVsRestClassifier 和带 decision_function_shape ='ovr' 的 SVC 有什么区别?

machine-learning - 所有机器学习算法都使用词频作为特征吗?

r - 如何在R中实现支持向量机

python - SVM 图像预测 Python

python - scikit-learn:SVM 给我零错误,但无法预测

scikit-learn - sklearn : AUC score for LinearSVC and OneSVM

python - 用于绘制 ROC 曲线的 libsvm

machine-learning - 支持向量机 (SVM) 的一些实现细节