我有一个非线性数据集,我正在使用 SVM(RBF 内核)构建分类模型,但不确定如何在 Matlab 中设置 SVM、C 和 gamma 的最佳超参数fitcsvm
。如果通过反复试验方法设置任意值,直到找到最佳性能,是否可以接受?
设置最佳 SVM 超参数
数据挖掘
分类
支持向量机
matlab
超参数
超参数调整
2021-09-24 03:30:35
2个回答
好吧,有很多文章试图解决这个问题,但基本上,为了保证一个好的解决方案,你需要做网格搜索(关于它的 sklearn 教程)
您可以为此使用各种技术,例如:
- Binary Gridsearch:在你想要的区间内尝试最大值和最小值,中间点,检查哪一边最好,并根据你的前一个中间点设置最小值或最大值。
这可以帮助您快速找到平均解决方案,但请记住,这没有保修。
详尽的网格搜索
随机参数优化
遗传算法
查看 sklearn 的链接以获取更多信息。我研究内核方法,这有点烦人的事情要解决。
注意:如果您只想尝试 RBF,我建议您使用 作为训练样本范数之间的值 . 您还可以将向量标准化为范数 1,并将搜索限制为 到 . 通常太小 对噪声有很高的敏感性,而太大则接近直线(失去非线性功率)
遗憾的是,超参数调优没有简单的解决方案。基本上,您有两种选择:
- 手动调整:阅读 SVM 的文档并深入研究相应的文献。尝试了解不同的核函数如何工作以及哪些函数适合您的分类问题。将超参数设置为您所知道的最好的,然后观察细微的偏差会产生什么差异。当然,这种方法仍然会有一定程度的反复试验。
- 网格搜索:对于所有类别参数(例如核函数),设置所有可能类别的列表,对于所有度量参数(例如 epsilon),定义合理值的范围。这是你的超参数空间。随后,使用从超参数空间中随机选择的参数运行多个 SVM。最后,您选择精度最高的超参数组合。(注意:还有其他方法比随机选择更复杂)
这两种方法都被广泛使用,但是,如果您对 SVM 不是很熟悉,我强烈建议您手动调整。
当然,简单地设置一个网格搜索,吃点东西,然后选择性能最好的超参数组合是非常诱人的。但最终,您将不会学到任何东西,并且您将不知道这些超参数是否是您的问题的合理选择。扩展您的知识在未来将是有益的,因为它减少了未来手动调整的工作量,并且因为将来您将能够缩小网格搜索的超参数空间,这将显着减少计算时间。
其它你可能感兴趣的问题