最速のSVM実装


16

一般的な質問の詳細。予測モデリングのためにrbf SVMを実行しています。私の現在のプログラムには間違いなく少しスピードアップが必要だと思います。私はscikitを使用して、粗いグリッドから細かいグリッドの検索とクロス検証を行います。

各SVMの実行には約1分かかりますが、すべての反復を行っても、まだ遅いと感じています。最終的に複数のコアでクロス検証部分をマルチスレッドすると仮定すると、プログラムを高速化するための推奨事項はありますか?SVMのより高速な実装はありますか?GPU SVMについて聞いたことがありますが、あまり掘り下げていません。ユーザーは誰ですか?それは速いですか?


1
scikit-learnのSGDClassifierは非常に高速ですが、線形SVM向けです。scikit-learnの人に聞いて、scikit-learnタグを追加することもできます。
-denis

非線形カーネルSVMは遅くなる運命にあります。おそらく、線形モデルで遊んでから(Vowpal Wabbitを調べてください)、次に非線形モデルに移行する必要があります。線形モデルでより複雑な機能を作成することにより、非線形性を得ることができます。非常に多くの場合、非線形モデルでは、大きな計算コストでパフォーマンスが徐々に向上します。非線形カーネルSVMに反対するものはありませんが、実用的な観点から念頭に置いてください。
ヴラディスラフドブガレス

1
ハイパーパラメーター検索用に特別なチューニングライブラリを使用することで高速化できます。これは、グリッド検索よりもはるかに効率的です(つまり、はるかに少ないハイパーパラメーターセットをテストする必要があります)。ライブラリのチューニングの例には、OptunityおよびHyperoptが含まれます。
マーククレセン

回答:


16

GoogleのSofiaアルゴリズムには、線形SVMの非常に高速な実装が含まれています。最速のSVMの1つですが、分類のみをサポートし、線形SVMのみをサポートしていると思います。

Rパッケージもあります


リンクには、「パッケージ 'RSofia'がCRANリポジトリから削除されました」と表示されます。理由は何ですか?
ジェームズハーシュホーン

@JamesHirschorn開発者はおそらくそれを維持することをやめました。CRANアーカイブからインストールできます。
ザック

10

最も簡単な高速化は、相互検証を並行して実行することです。個人的には、foreachをバックエンドとして使用するRキャレットパッケージが好きです。クロスバリデーションとグリッド検索を複数のコアまたは複数のマシンに簡単に適用できます。

Caretは、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クラスターを並列バックエンドとして使用することも簡単です。これらの問題はありません。


ありがとう、ザック。scikitsにはクロス検証を並行して実行する方法もあると思います。それを除いて、スピードアップに関する他の提案はありますか?ありがとう。
トマス

@danjeharry:並列相互検証は、ここでは実際に低い成果であり、最初にそれを探ることを強くお勧めします。それを超えて、SVMの具体的な高速化についてはあまり知りません。並列SVMアルゴリズムを見つけることができれば、それも良い考えかもしれません。トレーニングに使用しているデータセットは何行/列ですか?
ザック

Zachに感謝します。並列cvを調べます。私は約650の属性と5000の例を行っています。
トマス



2

RにはGPUで高速化された優れたsvmパッケージrpusvmがあり、20Kサンプル* 100の次元でトレーニングするのに20秒かかり、CPUが過負荷になることはないため、GPUを効率的に使用します。ただし、NVIDIA GPUが必要です。


1

警告:これは恥知らずのプラグです。

DynaMLは、私が取り組んでいるScalaベースのMLライブラリです。カーネルベースのLS-SVM(最小二乗サポートベクターマシン)を、グリッド検索または連成シミュレーテッドアニーリングを使用して、自動カーネルチューニングと共に実装しました。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.