使用 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来微调Cgamma参数。

以上是关于使用 libsvm 调整 svm的主要内容,如果未能解决你的问题,请参考以下文章

Libsvm java工程实践

多类 SVM(一对一)

使用线性内核调整 SVM 时,R 插入符号异常缓慢

在 R 中调整 svm 参数(线性 SVM 内核)

调整参数 SVM

为啥在 Weka 中使用 libsvm 时会出现“NoClassDefFoundError:libsvm/svm_print_interface”错误?