Aprendizaje automático con Python


53

Estoy considerando usar bibliotecas de Python para hacer mis experimentos de Machine Learning. Hasta ahora, había estado confiando en WEKA, pero en general he estado bastante insatisfecho. Esto se debe principalmente a que he encontrado que WEKA no está tan bien respaldado (muy pocos ejemplos, la documentación es escasa y el apoyo de la comunidad es menos que deseable en mi experiencia), y me he encontrado en situaciones difíciles sin ayuda. Otra razón por la que estoy considerando este movimiento es porque realmente me gusta Python (soy nuevo en Python) y no quiero volver a la codificación en Java.

Entonces mi pregunta es, ¿cuáles son los más

  1. exhaustivo
  2. escalable (100k características, 10k ejemplos) y
  3. bibliotecas bien soportadas para hacer ML en Python por ahí?

Estoy particularmente interesado en hacer una clasificación de texto, por lo que me gustaría utilizar una biblioteca que tenga una buena colección de clasificadores, métodos de selección de características (Ganancia de información, Chi-Sqaured, etc.) y capacidades de preprocesamiento de texto (derivación, eliminación de palabras vacías , tf-idf, etc.).

Basado en los hilos de correo electrónico pasados ​​aquí y en otros lugares, hasta ahora he estado mirando PyML, scikits-learn y Orange. ¿Cómo han sido las experiencias de las personas con respecto a las 3 métricas anteriores que menciono?

¿Cualquier otra sugerencia?


Muchas gracias a todos por sus comentarios. Creo que por ahora iré con NLTK + scikit-learn y veré a dónde van las cosas.
Andy

1
No puedo evitar proponerle que mire R , que tiene una biblioteca de ML mucho más grande y (creada especialmente para este trabajo) proporciona un entorno mucho más homogéneo. El paquete de minería de texto de R se presenta aquí .

@mbq: Sí, soy muy consciente de R, pero dado que tengo que hacer mucha programación "no estadística" antes de realizar la extracción de texto real, creo que me quedaré con Python por ahora.
Andy

1
Puede usar Python y R. Una opción es usar un método de almacenamiento de lenguaje neutral como una base de datos para mantener los resultados entre los pasos de procesamiento de datos.
Faheem Mitha

Puede usar Weka desde su código de Python: dimitri-christodoulou.blogspot.com/2012/03/…

Respuestas:


40

Acerca de la opción scikit-learn: las características de 100k (dispersas) y las muestras de 10k son razonablemente pequeñas como para caber en la memoria, por lo tanto, son perfectamente posibles con scikit-learn (el mismo tamaño que el conjunto de datos de 20 grupos de noticias)

Aquí hay un tutorial que di en PyCon 2011 con un capítulo sobre clasificación de texto con ejercicios y soluciones:

También di una charla sobre el tema, que es una versión actualizada de la versión que di en PyCon FR. Aquí están las diapositivas (y el video incrustado en los comentarios):

En cuanto a la selección de funciones, eche un vistazo a esta respuesta en quora, donde todos los ejemplos se basan en la documentación de scikit-learn:

Todavía no tenemos la extracción de la función de colocación en scikit-learn. Use nltk y nltk-trainer para hacer esto mientras tanto:


Gracias. Esto parece un camino particularmente bueno hacia adelante. Voy a probarlo.
Andy

@ogrisel, algunos enlaces se pudren con los primeros tres enlaces (también falta el video en el enlace cuatro). Aquí hay un enlace al nuevo dominio Scikit scikit-learn.org
xtian

14

En términos de trabajar con texto, eche un vistazo a NLTK. Muy, muy bien respaldado y documentado (incluso hay un libro en línea, o en papel si lo prefiere) y hará el preprocesamiento que necesite. Puede encontrar Gensim útil también; el énfasis está en el modelado de espacio vectorial y tiene implementaciones escalables de LSI y LDA (pLSI también creo) si son de interés. También hará la selección por tf-idf, no estoy seguro de que NLTK lo haga. He usado piezas de estos en corpus de ~ 50k sin mucha dificultad.

NLTK: http://www.nltk.org/

Gensim: http://nlp.fi.muni.cz/projekty/gensim/

Desafortunadamente, en cuanto al tema principal de su pregunta, no estoy familiarizado con las bibliotecas específicas a las que hace referencia (aunque he usado fragmentos de scikits-learn antes).


3
+1 para NLTK. Olivier Grisel, que está haciendo investigación de Machine Learning y procesamiento de lenguaje natural, tiene algunos buenos tutoriales y diapositivas en la web. Puedo pensar en el aprendizaje estadístico y la clasificación de texto con NLTK y scikit-learn (PyCON FR 2010), por ejemplo.
chl

@chi Gracias por ese tutorial, he estado hurgando un poco y parece que tiene mucho material agradable por ahí. También muestra una matriz de confusión con un mapa de calor en sus diapositivas;)
JMS

9

Python tiene una amplia gama de bibliotecas ML (consulte también mloss.org). Sin embargo, siempre tengo la sensación de que es más útil para los investigadores ml que para los profesionales ml.

Numpy / SciPy y matplotlib son excelentes herramientas para el trabajo científico con Python. Si no tiene miedo de piratear la mayoría de las fórmulas matemáticas usted mismo, no se sentirá decepcionado. Además, es muy fácil usar la GPU con cudamat o gnumpy : los experimentos que tomaron días antes ahora se completan en horas o incluso minutos.

El último chico de la cuadra es probablemente Theano . Es un lenguaje simbólico para expresiones matemáticas que viene con opciones, implementaciones de GPU y la diferenciación automática de super características que es increíble para los métodos basados ​​en gradiente.

Además, hasta donde yo sé, el NLTK mencionado por JMS es básicamente la biblioteca de lenguaje natural de código abierto número uno.

Python es la herramienta adecuada para el aprendizaje automático.


8

Déjame sugerirte naranja

exhaustivo

si

escalable (100k características, 10k ejemplos)

si

bibliotecas bien soportadas para hacer ML en Python por ahí?

si

biblioteca que tiene una buena colección de clasificadores, métodos de selección de características (ganancia de información, Chi-Sqaured, etc.),

Todo esto funciona de fábrica en Orange

y capacidades de preprocesamiento de texto (derivación, eliminación de palabras vacías, tf-idf, etc.).

Sin embargo, nunca he usado Orange para el procesamiento de texto


+1 para naranja. Tienen una excelente documentación que muestra cómo ponerse al día rápidamente, y puede usar su GUI de programación visual o bibliotecas de llamadas desde Python.
Josh Hemann

4

No estoy seguro de si esto es particularmente útil, pero hay una guía para que los programadores aprendan estadísticas en Python disponibles en línea. http://www.greenteapress.com/thinkstats/

Parece bastante bueno en mi breve exploración, y parece hablar sobre algunos métodos de aprendizaje automático, por lo que podría ser un buen lugar para comenzar.


3

Echa un vistazo a libsvm .


44
libsvm no escala bien a un gran número de características y muestras. Mejor usar liblinear por los mismos autores. los modelos lineales suelen ser lo suficientemente buenos en espacios de alta dimensión.
ogrisel

¿No es libsvm el motor de svm para scikits-learn y Orange? ¿O realmente recurren a liblinear en el caso lineal?
John Robertson

3

SHOGUN ( 将軍 ) es una caja de herramientas de aprendizaje automático a gran escala, que parece prometedora.



1

Como destacó @ogrisel, scikit-learn es uno de los mejores paquetes de aprendizaje automático para Python. Es adecuado para conjuntos de datos tan pequeños como características de 100k (dispersos) y muestras de 10k, e incluso para conjuntos de datos marginalmente más grandes que pueden contener más de 200k filas. Básicamente, cualquier conjunto de datos que se ajuste a la memoria.

Pero, si está buscando un marco de Python Machine Learning altamente escalable, le recomiendo Pyspark MLlib. Dado que los conjuntos de datos en estos días pueden crecer exponencialmente (dada la gran cantidad de datos y la ola de aprendizaje profundo), a menudo necesitaría una plataforma que pueda escalar bien y funcionar rápidamente no solo en la fase de capacitación del modelo, sino también durante la fase de ingeniería de características (transformación de características , selección de características). Veamos las tres métricas de la plataforma Spark Mllib que le interesan:

  1. Escalabilidad: si su conjunto de datos puede caber en la memoria, scikit-learn debería ser su elección. Si es demasiado grande para caber en la memoria, Spark es el camino a seguir. Lo importante a tener en cuenta aquí es que Spark funciona más rápido solo en una configuración distribuida.

  2. Integralidad: Sklearn es mucho más rico en términos de implementaciones decentes de una gran cantidad de algoritmos de uso común en comparación con spark mllib. El soporte para la manipulación y transformación de datos también es más rico en scikit-learn. Spark Mllib tiene suficientes módulos de transformación de datos que hacen el truco la mayoría de las veces. Por lo tanto, en caso de que termines con spark mllib por problemas de escalabilidad, aún podrás hacer el trabajo. Tiene todo el soporte para análisis de correlación, extracción de características (tf-idf, word2vec, CountVectorizer), transformación de características (Tokenizer, StopWordsRemover, nn-gram, Binarizer, PCA, etc.). Para obtener una lista detallada, consulte el siguiente enlace:

Extracción, transformación y selección de funciones en Spark mllib

  1. Clasificación: Spark mllib tiene la implementación de todos los algoritmos principales que usaría la mayoría de las veces (incluidos los algos que funcionan bien para la clasificación de texto). Para obtener una descripción general detallada de los algoritmos disponibles a través de mllib, consulte el siguiente enlace.

Clasificación y regresión de Mllib

Bonificación: Apache Spark tiene soporte para Python, R, Java y Scala. Por lo tanto, si mañana decide experimentar con un idioma diferente (como una opción personal o por razones profesionales), no tendrá que aprender un marco completamente nuevo.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.