设置最佳 SVM 超参数

数据挖掘 分类 支持向量机 matlab 超参数 超参数调整
2021-09-24 03:30:35

我有一个非线性数据集,我正在使用 SVM(RBF 内核)构建分类模型,但不确定如何在 Matlab 中设置 SVM、C 和 gamma 的最佳超参数fitcsvm如果通过反复试验方法设置任意值,直到找到最佳性能,是否可以接受?

2个回答

好吧,有很多文章试图解决这个问题,但基本上,为了保证一个好的解决方案,你需要做网格搜索(关于它的 sklearn 教程)

您可以为此使用各种技术,例如:

  • Binary Gridsearch:在你想要的区间内尝试最大值和最小值,中间点,检查哪一边最好,并根据你的前一个中间点设置最小值或最大值。

这可以帮助您快速找到平均解决方案,但请记住,这没有保修。

  • 详尽的网格搜索

  • 随机参数优化

  • 遗传算法

查看 sklearn 的链接以获取更多信息。我研究内核方法,这有点烦人的事情要解决。

注意:如果您只想尝试 RBF,我建议您使用σ 作为训练样本范数之间的值 ±80%. 您还可以将向量标准化为范数 1,并将搜索限制为0.21.8. 通常太小σ 对噪声有很高的敏感性,而太大则接近直线(失去非线性功率)

遗憾的是,超参数调优没有简单的解决方案。基本上,您有两种选择:

  1. 手动调整:阅读 SVM 的文档并深入研究相应的文献。尝试了解不同的核函数如何工作以及哪些函数适合您的分类问题。将超参数设置为您所知道的最好的,然后观察细微的偏差会产生什么差异。当然,这种方法仍然会有一定程度的反复试验。
  2. 网格搜索:对于所有类别参数(例如核函数),设置所有可能类别的列表,对于所有度量参数(例如 epsilon),定义合理值的范围。这是你的超参数空间。随后,使用从超参数空间中随机选择的参数运行多个 SVM。最后,您选择精度最高的超参数组合。注意:还有其他方法比随机选择更复杂)

这两种方法都被广泛使用,但是,如果您对 SVM 不是很熟悉,我强烈建议您手动调整。

当然,简单地设置一个网格搜索,吃点东西,然后选择性能最好的超参数组合是非常诱人的。但最终,您将不会学到任何东西,并且您将不知道这些超参数是否是您的问题的合理选择。扩展您的知识在未来将是有益的,因为它减少了未来手动调整的工作量,并且因为将来您将能够缩小网格搜索的超参数空间,这将显着减少计算时间。