cluster analysis - que - Qué biblioteca de aprendizaje automático usar
que es la tecnologia machine learning (6)
Estoy buscando una biblioteca que, idealmente, tenga las siguientes características:
- implementa la agrupación jerárquica de datos multidimensionales (idealmente en similiarity o matriz de distancia)
- implementa máquinas de vectores de soporte
- está en C ++
- está algo documentado (este parece ser el más difícil)
Me gustaría que esto esté en C ++, ya que me siento más cómodo con ese idioma, pero también usaré cualquier otro idioma si la biblioteca lo vale. Busqué en Google y encontré algunas, pero realmente no tengo tiempo para probarlas todas, así que quiero escuchar lo que otras personas tuvieron para las experiencias. Responda solo si tiene alguna experiencia con la biblioteca que recomienda.
PD: también podría usar diferentes bibliotecas para la agrupación y la SVM.
Bibliotecas generales de aprendizaje automático:
Estos dos son similares a Weka. Sin embargo, tienen la eficiencia en mente.
1.Shark (LGPL)
https://github.com/Shark-ML/Shark/
2. Waffles (LGPL)
http://waffles.sourceforge.net/
SVM y otros clasificadores lineales:
1.LibSVM (estilo BSD)
2.LibLinear (estilo BSD)
http://www.csie.ntu.edu.tw/~cjlin/libsvm/
Todos ellos están en C ++.
No es C ++, pero considera usar R. En particular, eche un vistazo a la vista de aprendizaje automático en CRAN , que muestra muchas de las bibliotecas anteriores, incluidas Weka y libsvm.
Ok, para completitud voy a publicar con lo que fui al final. Estoy usando scipy-cluster para la parte de agrupamiento ahora. Es la implementación más versátil que he encontrado hasta ahora. Creo que iré con http://www.csie.ntu.edu.tw/~cjlin/libsvm/ (ahora tiene una interfaz de Python) para la parte de SVM. Voy con Python porque realmente no había una implementación apropiada de clústeres jerárquicos en C ++ (la biblioteca de clustering de C está especializada en microarrays y no admite datos multidimensionales).
Solo hay unas pocas bibliotecas ML que he usado lo suficiente para que me sienta cómodo recomendándolas; dlib ml es sin duda uno de ellos.
Descarga de Sourceforge here ; y check-out sangrante:
hg clone http://hg.code.sf.net/p/dclib/code dclib-code
El creador original de la biblioteca y el actual mantenedor es Davis King.
Su lista de deseos en comparación con las funciones relevantes de dlib:
buena documentación : para librerías de código abierto dirigidas a un grupo relativamente pequeño de usuarios / desarrolladores, esto es probablemente lo mejor posible; aparte de los documentos habituales, refinados durante la historia de desarrollo de cinco años, hay una Introducción a dlib , un foro (de poco tráfico) que se actualiza con frecuencia; y un gran conjunto de ejemplos excelentes (que incluyen al menos uno para SVM).
C ++ : 100% en C ++ hasta donde yo sé.
Algoritmo de la máquina de Vector de soporte : sí; de hecho, los módulos SVM han sido el foco de las actualizaciones más recientes de esta Biblioteca.
Algoritmo de agrupamiento jerárquico : no fuera de la caja; sin embargo, hay un código empaquetado para k-means clustering . Obviamente, los resultados de cada técnica son muy diferentes, pero el cálculo de la métrica de similitud y el posterior paso recursivo / iterativo de partición están en el corazón de ambos, en otras palabras, el motor de cálculo para la agrupación jerárquica está todo allí. Para adaptar el módulo de agrupamiento existente para HC, tomará más de un par de líneas de código, pero tampoco es un esfuerzo importante dado que está trabajando casi en el nivel de presentación de datos.
dlib ml tiene algunos puntos adicionales para recomendarlo. Es una biblioteca madura (está en la versión 17.x ahora, la versión 1.x fue lanzada en algún momento a finales de 2005, creo) pero también permanece en desarrollo activo, como lo demuestran los registros de repos (la última actualización, 17.27, fue 17). Mayo de 2010) y el último compromiso (23 de mayo de 2010). Además, también incluye bastantes otras técnicas de ML (p. Ej., Redes bayesianas, métodos Kernel, etc.). Y tercero, dllib ml tiene excelentes bibliotecas de "soporte" para el cálculo y la optimización de la matriz, que son bloques de construcción fundamentales de muchas técnicas de ML.
En la fuente, me he dado cuenta de que dlib ml tiene licencia de BSL (Boost?), Que es una licencia de código abierto, aunque no sé nada más sobre este tipo de licencia.
Un par de opciones posibles adicionales:
Campos aleatorios condicionales (CRF): http://www.chokkan.org/software/crfsuite/
Modelos ocultos de Markov (HMM): http://www.cs.au.dk/~asand/?page_id=152
Para una biblioteca general de ML, considere Torch (versión 7, en el momento de la redacción): https://github.com/andresy/torch
El sistema Orange se implementa en C ++ y se puede usar como una biblioteca, pero se enfoca en exponer su funcionalidad tanto como envoltorios Python para scripting flexible como programación visual: http://orange.biolab.si/
WEKA ( http://www.cs.waikato.ac.nz/ml/weka/ ) es una excelente biblioteca de aprendizaje automático de código abierto que cumple con la mayoría de sus requisitos, excepto C ++, está escrito en Java. Está muy bien documentado, implementa máquinas vectoriales de soporte y agrupamiento y he tenido muy buenas experiencias con él.