Plus une question générale. J'utilise un SVM rbf pour la modélisation prédictive. Je pense que mon programme actuel a vraiment besoin d'être accéléré. J'utilise scikit learn avec une recherche de grille grossière à fine + validation croisée.
Chaque exécution de SVM prend environ une minute, mais avec toutes les itérations, je la trouve toujours trop lente. En supposant que j'ai finalement multi-threadé la partie de validation croisée sur plusieurs cœurs, des recommandations pour accélérer mon programme? Des implémentations plus rapides des SVM? J'ai entendu parler de certains SVM GPU, mais je n'y ai pas beaucoup creusé. Des utilisateurs et est-ce plus rapide?
Réponses:
L' algorithme Sofia de Google contient une implémentation extrêmement rapide d'un SVM linéaire. C'est l'un des SVM les plus rapides du marché, mais je pense qu'il ne prend en charge que la classification et ne prend en charge que les SVM linéaires.
Il y a même un package R !
la source
L'accélération la plus simple que vous obtiendrez est d'exécuter la validation croisée en parallèle. Personnellement, j'aime le package caret en R , qui utilise foreach comme backend. Il est très facile d'exploiter la validation croisée et la recherche dans la grille sur plusieurs cœurs ou plusieurs machines.
Caret peut gérer de nombreux modèles différents, y compris les SVM rbf:
Notez que la bibliothèque doMC () n'est disponible que sur mac et linux, elle doit être exécutée à partir de la ligne de commande, pas à partir d'une interface graphique, et elle casse tous les modèles de RWeka. Il est également facile d'utiliser des clusters MPI ou SNOW comme backend parallèle, qui ne présentent pas ces problèmes.
la source
Je me rends compte que c'est une question assez ancienne, mais il est également possible (selon la taille de votre ensemble de données, il peut être plus ou moins efficace) d'utiliser des approximations à faible dimension de la carte des caractéristiques du noyau, puis de l'utiliser dans un SVM linéaire. Voir http://scikit-learn.org/stable/modules/kernel_approximation.html
la source
Jetez un œil au module multiprocessing de Python . Il facilite la parallélisation des choses et est parfait pour la validation croisée.
la source
R a un excellent package svm accéléré par GPU rpusvm , il faut environ 20 secondes pour s'entraîner sur des échantillons de 20K * 100 dimensions, et j'ai trouvé que le CPU n'est jamais surchargé par lui, donc il utilise le GPU efficacement. Cependant, il nécessite un GPU NVIDIA.
la source
Alerte: il s'agit d'une prise sans vergogne.
Considérez DynaML comme une bibliothèque ML basée sur Scala sur laquelle je travaille. J'ai implémenté LS-SVM basé sur le noyau (Least Squares Support Vector Machines) ainsi que le réglage automatisé du noyau, en utilisant la recherche de grille ou le recuit simulé couplé.
http://mandar2812.github.io/DynaML/
la source