Eher eine allgemeine Frage. Ich verwende eine rbf-SVM für die vorhersagende Modellierung. Ich denke, mein aktuelles Programm muss definitiv etwas beschleunigt werden. Ich benutze Scikit Learn mit einer Grob- bis Feinrastersuche + Kreuzvalidierung.
Jeder SVM-Lauf dauert ungefähr eine Minute, aber bei all den Iterationen finde ich es immer noch zu langsam. Angenommen, ich verteile den Teil der Kreuzvalidierung eventuell über mehrere Kerne. Gibt es Empfehlungen zur Beschleunigung meines Programms? Gibt es schnellere Implementierungen von SVMs? Ich habe von einigen GPU-SVMs gehört, mich aber nicht viel damit beschäftigt. Irgendwelche Benutzer und ist es schneller?
Antworten:
Der Sofia-Algorithmus von Google enthält eine extrem schnelle Implementierung einer linearen SVM. Es ist eine der schnellsten SVMs, aber ich denke, sie unterstützt nur Klassifizierung und nur lineare SVMs.
Es gibt sogar ein R-Paket !
quelle
Die einfachste Geschwindigkeit, die Sie erzielen können, ist die parallele Kreuzvalidierung. Persönlich mag ich das Caret- Paket in R , das foreach als Backend verwendet. Es macht es sehr einfach, die Kreuzvalidierung und die Rastersuche auf mehrere Kerne oder mehrere Computer zu verteilen.
Caret kann mit vielen verschiedenen Modellen umgehen, einschließlich rbf-SVMs:
Beachten Sie, dass die doMC () -Bibliothek nur unter Mac und Linux verfügbar ist. Sie sollte über die Befehlszeile und nicht über eine grafische Benutzeroberfläche ausgeführt werden und alle Modelle von RWeka beschädigen. Es ist auch einfach, MPI- oder SNOW- Cluster als paralleles Backend zu verwenden, bei denen diese Probleme nicht auftreten.
quelle
Mir ist klar, dass dies eine ziemlich alte Frage ist, aber es ist auch möglich (abhängig von der Größe Ihres Datensatzes kann es mehr oder weniger effektiv sein), niedrig dimensionierte Approximationen der Kernel-Feature-Map zu verwenden und diese dann in einer linearen SVM zu verwenden. Siehe http://scikit-learn.org/stable/modules/kernel_approximation.html
quelle
Schauen Sie sich das Multiprocessing- Modul von Python an . Es macht das Parallelisieren von Dingen wirklich einfach und ist perfekt für die Kreuzvalidierung.
quelle
R hat ein großartiges GPU-beschleunigtes svm-Paket rpusvm , es dauert ~ 20 Sekunden, um mit 20.000 Samples * 100 Dimensionen zu trainieren, und ich stellte fest, dass die CPU nie überlastet ist, sodass die GPU effizient genutzt wird. Es ist jedoch eine NVIDIA-GPU erforderlich.
quelle
Warnung: Dies ist ein schamloser Stecker.
Betrachten Sie DynaML als eine Scala-basierte ML-Bibliothek, an der ich arbeite. Ich habe Kernel-basiertes LS-SVM (Least Squares Support Vector Machines) zusammen mit automatisiertem Kernel-Tuning implementiert, unter Verwendung von Grid Search oder Coupled Simulated Annealing.
http://mandar2812.github.io/DynaML/
quelle