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
- exhaustivo
- escalable (100k características, 10k ejemplos) y
- 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?
fuente
Respuestas:
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:
http://scikit-learn.github.com/scikit-learn-tutorial/ (versión HTML en línea)
https://github.com/downloads/scikit-learn/scikit-learn-tutorial/scikit_learn_tutorial.pdf (versión PDF)
https://github.com/scikit-learn/scikit-learn-tutorial (código fuente + ejercicios)
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:
fuente
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).
fuente
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.
fuente
Déjame sugerirte naranja
si
si
si
Todo esto funciona de fábrica en Orange
Sin embargo, nunca he usado Orange para el procesamiento de texto
fuente
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.
fuente
Echa un vistazo a libsvm .
fuente
SHOGUN ( 将軍 ) es una caja de herramientas de aprendizaje automático a gran escala, que parece prometedora.
fuente
biblioteca de código abierto de python ml PySpark MLlib https://spark.apache.org/docs/0.9.0/mllib-guide.html
biblioteca ml propia con prueba gratuita GraphLab Create https://dato.com/products/create/
fuente
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:
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.
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
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.
fuente
No sé si todavía estás buscando algún consejo (hiciste esta pregunta hace 5 meses ...). Acabo de comenzar este libro y hasta ahora está bastante bien:
https://www.amazon.com.mx/dp/1491962291/ref=cm_cr_ryp_prd_ttl_sol_3
El autor muestra código, ejemplos y explica algunas teorías y matemáticas "detrás de escena" de algoritmos de ML. Esto me parece muy instructivo. Espero que esto sea lo mismo para ti.
fuente