最快的SVM实施


16

更多的是一个一般性的问题。我正在运行rbf SVM进行预测建模。我认为我当前的程序肯定需要加快速度。我使用scikit learning进行粗略到精细的网格搜索+交叉验证。

每次SVM运行大约需要一分钟,但是在所有迭代中,我仍然发现它太慢了。假设我最终在多个内核上对交叉验证部分进行了多线程处理,那么关于提高程序速度的建议是什么?是否有更快的SVM实现?我听说过一些GPU SVM,但并没有对其进行深入研究。任何用户,速度更快吗?


1
scikit-learn中的SGDClassifier 速度非常快,但适用于线性SVM。您可能会问scikit-learn伙计们,也添加标签scikit-learn。
denis 2012年

非线性内核SVM注定是缓慢的。也许您应该开始使用线性模型(请查看Vowpal Wabbit),然后进入非线性模型。您甚至可以通过使用线性模型创建更复杂的特征来获得一些非线性。非线性模型通常会以一定的计算量导致一些增量的性能提升。从实用的角度来看,没有什么要反对非线性内核SVM的,只是要牢记。
Vladislavs Dovgalecs 2015年

1
您可以通过使用专用的调整库进行超参数搜索来加快速度,该库比网格搜索更高效(即,需要测试的超参数集要少得多)。调优库的示例包括Optunity和Hyperopt。
马克·克莱森

Answers:


16

Google的Sofia算法包含了线性SVM的极快实现。它是目前最快的SVM之一,但我认为它仅支持分类,并且仅支持线性SVM。

甚至还有一个R包


您的链接现在显示为“软件包'RSofia'已从CRAN存储库中删除”。知道为什么吗?
詹姆斯·希尔斯霍恩,2016年

@JamesHirschorn开发人员可能已停止对其进行维护。您可以从CRAN归档文件中安装它。
扎克

10

您要获得的最简单的加速是并行运行交叉验证。就个人而言,我喜欢R中插入符号包,该包使用foreach作为后端。这使得将交叉验证和网格搜索植入多个核或多台机器非常容易。

脱字号可以处理许多不同的模型,包括rbf SVM:

library(caret)
library(doMC)
registerDoMC()
model <-  train(Species ~ ., data = iris, method="svmRadial", 
    trControl=trainControl(method='cv', number=10))
> confusionMatrix(model)
Cross-Validated (10 fold) Confusion Matrix 

(entries are percentages of table totals)

            Reference
Prediction   setosa versicolor virginica
  setosa       32.4        0.0       0.0
  versicolor    0.0       30.9       2.0
  virginica     0.9        2.4      31.3

请注意,doMC()库仅在Mac和Linux上可用,应该从命令行运行,而不是从GUI运行,并且它破坏了RWeka的所有模型。使用MPISNOW群集作为并行后端也很容易,它们没有这些问题。


谢谢扎克。我相信scikits还可以并行运行交叉验证,这是我计划要做的。除此之外,还有其他提速建议吗?谢谢。
tomas 2012年

@danjeharry:并行交叉验证确实是这里的低挂水果,我强烈建议您首先进行探索。除此之外,我对加速SVM并不了解很多。如果可以找到并行SVM算法,那可能也是个好主意。您正在训练的数据集有多少行/列?
Zach 2012年

谢谢Zach,我将研究并行简历。我正在做大约650个属性和5000个示例。
tomas 2012年


2

看一下Python的多处理模块。它使并行​​化变得非常容易,并且非常适合交叉验证。


2

R有一个很棒的GPU加速svm软件包rpusvm,它需要大约20秒的时间来训练20K样本* 100尺寸,我发现CPU永远不会过载,因此它可以有效地使用GPU。但是,它需要NVIDIA GPU。


1

警告:这是一个无耻的插件。

考虑DynaML是我正在研究的基于Scala的ML库。我已经使用网格搜索或耦合模拟退火实现了基于内核的LS-SVM(最小二乘支持向量机)以及自动内核调整。

http://mandar2812.github.io/DynaML/

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.