¿Cuál es la mejor biblioteca SVM utilizable desde Python?

Podría estar sesgado, pero tendería a recomendar http://scikit-learn.org:

Envuelve tanto liblinear como libsvm. El contenedor fue ajustado para minimizar las asignaciones de memoria y la falta de coincidencia de impedancia entre las representaciones de matriz numpy.ndarray y scipy.sparse de python-land y la representación interna libsvm. Tanto las variantes densas como las escasas de libsvm están envueltas.

Además, también ajustamos los pesos de importancia de nivel de clase y muestra que pueden ser muy importantes cuando se trata de conjuntos de datos desequilibrados.

Esto tiene un impacto en el rendimiento, ver, por ejemplo, esas diapositivas:

http://fseoane.net/talks/fosdem-…

scikit-learn también presenta muchas utilidades adicionales, como la búsqueda en cuadrícula de hiperparámetros mediante validación cruzada (multinúcleo), normalización de la entrada mediante transformadores de PCA blanqueadores, extractor de características para fuentes de texto (y pronto imágenes también), métricas y evaluación de rendimiento (Curva ROC, recuperación de precisión, precisión de clasificación, varianza explicada, …) y así sucesivamente.

Tuve que hacer una tarea para comparar diferentes implementaciones de SVM. Comparé las siguientes implementaciones:

  1. Implementación de Scikit-learn SVM basada en LibSVM basado en SMO
  2. Llamar a binarios SVMLight desde Python usando un subproceso
  3. Creando una pequeña implementación para Pegasos (en Python) que resuelve en la forma primaria

El cuaderno de IPython que hace la comparación se puede encontrar en http://nbviewer.ipython.org/5153583

Al elegir “mejor” hice una comparación entre diferentes dimensiones, como la memoria utilizada, el tiempo de CPU, etc.

El código de Pegasos se puede encontrar en https://gist.github.com/nipunred

Advertencia: no he realizado pruebas exhaustivas o múltiples iteraciones.