更多的是一个一般性的问题。我正在运行rbf SVM进行预测建模。我认为我当前的程序肯定需要加快速度。我使用scikit learning进行粗略到精细的网格搜索+交叉验证。
每次SVM运行大约需要一分钟,但是在所有迭代中,我仍然发现它太慢了。假设我最终在多个内核上对交叉验证部分进行了多线程处理,那么关于提高程序速度的建议是什么?是否有更快的SVM实现?我听说过一些GPU SVM,但并没有对其进行深入研究。任何用户,速度更快吗?
更多的是一个一般性的问题。我正在运行rbf SVM进行预测建模。我认为我当前的程序肯定需要加快速度。我使用scikit learning进行粗略到精细的网格搜索+交叉验证。
每次SVM运行大约需要一分钟,但是在所有迭代中,我仍然发现它太慢了。假设我最终在多个内核上对交叉验证部分进行了多线程处理,那么关于提高程序速度的建议是什么?是否有更快的SVM实现?我听说过一些GPU SVM,但并没有对其进行深入研究。任何用户,速度更快吗?
Answers:
您要获得的最简单的加速是并行运行交叉验证。就个人而言,我喜欢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的所有模型。使用MPI或SNOW群集作为并行后端也很容易,它们没有这些问题。
我意识到这是一个很老的问题,但是也有可能(取决于数据集的大小,它或多或少会有效)使用内核特征图的低维近似值,然后在线性SVM中使用它。参见http://scikit-learn.org/stable/modules/kernel_approximation.html
警告:这是一个无耻的插件。
考虑DynaML是我正在研究的基于Scala的ML库。我已经使用网格搜索或耦合模拟退火实现了基于内核的LS-SVM(最小二乘支持向量机)以及自动内核调整。