Más de una pregunta general. Estoy ejecutando un SVM rbf para el modelado predictivo. Creo que mi programa actual definitivamente necesita un poco más de velocidad. Yo uso scikit learn con una búsqueda de grilla gruesa a fina + validación cruzada.
Cada ejecución de SVM toma alrededor de un minuto, pero con todas las iteraciones, todavía lo encuentro demasiado lento. Suponiendo que eventualmente realice múltiples subprocesos de la parte de validación cruzada en múltiples núcleos, ¿alguna recomendación para acelerar mi programa? ¿Alguna implementación más rápida de SVM? He oído hablar de algunos SVM de GPU, pero no he investigado mucho. ¿Algún usuario y es más rápido?
Respuestas:
El algoritmo Sofía de Google contiene una implementación extremadamente rápida de un SVM lineal. Es uno de los SVM más rápidos que existen, pero creo que solo admite la clasificación y solo admite SVM lineales.
¡Incluso hay un paquete R !
fuente
La aceleración más fácil que obtendrá es ejecutar la validación cruzada en paralelo. Personalmente, me gusta el paquete caret en R , que usa foreach como backend. Hace que sea muy fácil cultivar la validación cruzada y la búsqueda de cuadrícula en múltiples núcleos o múltiples máquinas.
Caret puede manejar muchos modelos diferentes, incluidos los SVM de rbf:
Tenga en cuenta que la biblioteca doMC () solo está disponible en mac y linux, debe ejecutarse desde la línea de comandos, no desde una GUI, y rompe cualquier modelo de RWeka. También es fácil usar clústeres MPI o SNOW como backend paralelo, que no tienen estos problemas.
fuente
Me doy cuenta de que esta es una pregunta bastante antigua, pero también es posible (dependiendo del tamaño de su conjunto de datos, puede ser más o menos efectivo) usar aproximaciones de baja dimensión del mapa de características del núcleo y luego usarlo en un SVM lineal. Ver http://scikit-learn.org/stable/modules/kernel_approximation.html
fuente
Echa un vistazo al módulo de multiprocesamiento de Python . Hace que la paralelización de las cosas sea realmente fácil y es perfecta para la validación cruzada.
fuente
R tiene un excelente paquete de svm acelerado por GPU rpusvm , toma ~ 20 segundos entrenar en muestras de 20K * 100 dimensiones, y descubrí que la CPU nunca está sobrecargada, por lo que usa la GPU de manera eficiente. Sin embargo, requiere una GPU NVIDIA.
fuente
Alerta: este es un enchufe descarado.
Considere DynaML, una biblioteca de ML basada en Scala en la que estoy trabajando. He implementado LS-SVM basado en kernel (Máquinas de vectores de soporte de mínimos cuadrados) junto con la optimización automática del kernel, utilizando la búsqueda de cuadrícula o el recocido simulado acoplado.
http://mandar2812.github.io/DynaML/
fuente