使用 libsvm 调整 svm
Posted
技术标签:
【中文标题】使用 libsvm 调整 svm【英文标题】:Tuning svm with libsvm 【发布时间】:2013-05-24 20:32:48 【问题描述】:我不熟悉使用 LIBSVM 包。我知道调整参数很重要,但我有几个问题。
如何选择正确的内核?我知道线性是最快的,但是我们什么时候应该使用另一个呢?只有在准确率太低的情况下,还是有其他方法可以自动选择正确的内核?
其次,有没有一种在matlab中调优SVM的有效方法?我唯一能想到的就是为我要测试的每个参数制作嵌套的for
-loops,然后使用分类器进行训练和预测。对于如此基本的东西,有很多代码......
【问题讨论】:
【参考方案1】:检查下面给出的链接。不错的代码 sn-ps,特别是显示了使用三种不同尺度的交叉验证来调整参数。希望对您有所帮助!
https://sites.google.com/site/kittipat/libsvm_matlab/demo_libsvm_crossvalidation
【讨论】:
【参考方案2】:如何选择正确的内核?我知道线性是最快的,但是我们什么时候应该使用另一个呢?只有在准确度太低的情况下,还是有其他方法可以自动选择正确的内核?
最好的方法总是从线性内核开始。如果您正在处理大型数据集(数千维中的数十万个实例),您可能需要使用专门的线性包(例如LIBLINEAR)或集成方法(EnsembleSVM)。请注意,后者还没有合适的matlab 接口。
如果您有高维稀疏数据,线性核通常会表现得非常好,即使与更复杂的核相比也是如此。
一般来说,如果您使用线性内核的精度不够,最好的选择是使用 RBF 内核。众所周知,它们在大多数数据集上都表现出色。不过,当您切换到 RBF 内核时,您需要调整内核参数 gamma
。
其次,有没有一种在matlab中调优SVM的有效方法?
是的! LIBSVM 在训练期间使用 -v k
标志提供 k 折交叉验证。当您提供此选项时,训练将产生交叉验证的准确性(分类)或 mse(回归)而不是模型。不过,您仍然需要遍历参数元组。
【讨论】:
我不知道你提到的标志,这确实有帮助。谢谢。 你也可以利用grid.py来微调C
和gamma
参数。以上是关于使用 libsvm 调整 svm的主要内容,如果未能解决你的问题,请参考以下文章
为啥在 Weka 中使用 libsvm 时会出现“NoClassDefFoundError:libsvm/svm_print_interface”错误?