Las mejores bibliotecas de aprendizaje automático en Python

No hay duda de que las redes neuronales y el aprendizaje automático en general han sido uno de los temas más candentes en tecnología en los últimos años. Es fácil de ver...

Introducción

No hay duda de que las redes neuronales y el aprendizaje automático en general han sido uno de los temas más candentes en tecnología en los últimos años. Es fácil ver por qué con todos los casos de uso realmente interesantes que resuelven, como reconocimiento de voz, reconocimiento de imágenes o incluso [composición musical] (http://www.hexahedria.com/2015/08/03/ componer-música-con-redes-neuronales-recurrentes/). Entonces, para este artículo, decidí compilar una lista de algunas de las mejores bibliotecas de aprendizaje automático de Python y las publiqué a continuación.

En mi opinión, Python es uno de los mejores lenguajes que puede usar para aprender (e implementar) técnicas de aprendizaje automático por varias razones:

  • Es simple: Python ahora se está convirtiendo en el lenguaje de elección entre los nuevos programadores gracias a su sintaxis simple y su gran comunidad.
  • Es poderoso: El hecho de que algo sea simple no significa que no sea capaz. Python es también uno de los lenguajes más populares entre los científicos de datos y los programadores web. Su comunidad ha creado bibliotecas para hacer casi cualquier cosa que desee, incluido el aprendizaje automático.
  • Muchas bibliotecas ML: Hay toneladas de bibliotecas de aprendizaje automático ya escritas para Python. Puede elegir una de las cientos de bibliotecas según su caso de uso, habilidad y necesidad de personalización.

El último punto aquí es posiblemente el más importante. Los algoritmos que impulsan el aprendizaje automático son bastante complejos e incluyen muchas matemáticas, por lo que escribirlos usted mismo (y hacerlo bien) sería la tarea más difícil. Afortunadamente para nosotros, hay muchas personas inteligentes y dedicadas que han hecho este arduo trabajo por nosotros para que podamos concentrarnos en la aplicación en cuestión.

De ninguna manera se trata de una lista exhaustiva. Hay muchos códigos por ahí y solo estoy publicando algunas de las bibliotecas más relevantes o conocidas aquí. Ahora, a la lista.

Las bibliotecas más populares

He incluido una breve descripción de algunas de las bibliotecas más populares y para qué sirven, con una lista más completa de proyectos notables en la siguiente sección.

Flujo de tensor

Esta es la biblioteca de redes neuronales más nueva de la lista. Recién lanzado en los últimos días, TensorFlow es una biblioteca de redes neuronales de alto nivel que lo ayuda a programar sus arquitecturas de red mientras evita los detalles de bajo nivel. La atención se centra más en permitirle expresar su cálculo como un gráfico de flujo de datos, que es mucho más adecuado para resolver problemas complejos.

Está escrito principalmente en C++, que incluye los enlaces de Python, por lo que no tiene que preocuparse por sacrificar el rendimiento. Una de mis funciones favoritas es la arquitectura flexible, que le permite implementarla en una o más CPU o GPU en una computadora de escritorio, servidor o dispositivo móvil, todo con la misma API. No muchas bibliotecas, si es que hay alguna, pueden hacer esa afirmación.

Fue desarrollado para el proyecto Cerebro de Google y ahora es utilizado por cientos de ingenieros en toda la empresa, por lo que no hay duda de que es capaz de crear soluciones interesantes.

Sin embargo, como cualquier biblioteca, probablemente tendrá que dedicar algo de tiempo para aprender su API, pero el tiempo invertido debería valer la pena. En los primeros minutos de jugar con las funciones principales, ya me di cuenta de que TensorFlow me permitiría pasar más tiempo implementando mis diseños de red y no peleando con la API.

Si desea obtener más información sobre TensorFlow y las redes neuronales, intente tomar un curso como Aprendizaje profundo con TensorFlow, que no solo le enseñará sobre TensorFlow, sino también sobre muchas técnicas de aprendizaje profundo también.

 

scikit-learn

La biblioteca scikit-learn es definitivamente una de las bibliotecas de aprendizaje automático más populares, si no la más popular, entre todos los idiomas (en el momento de escribir este artículo). Tiene una gran cantidad de funciones para la extracción y el análisis de datos, lo que lo convierte en la mejor opción para investigadores y desarrolladores por igual.

Está construido sobre las populares bibliotecas NumPy, SciPy y matplotlib, por lo que tendrá una sensación familiar para muchas personas que ya usan estas bibliotecas. Aunque, en comparación con muchas de las otras bibliotecas enumeradas a continuación, esta tiene un nivel un poco más bajo y tiende a actuar como la base para muchas otras implementaciones de ML.

Dado lo poderosa que es esta biblioteca, puede ser difícil comenzar con ella a menos que tenga un buen recurso. Uno de los recursos más populares que he visto es Bootcamp de Python para ciencia de datos y aprendizaje automático, que hace un buen trabajo que explica cómo implementar muchos métodos ML en scikit-learn.

 

Teano

Theano es una biblioteca de aprendizaje automático que le permite definir, optimizar y evaluar expresiones matemáticas que involucran matrices multidimensionales, lo que puede ser un punto de frustración para algunos desarrolladores en otras bibliotecas. Al igual que scikit-learn, Theano también se integra estrechamente con NumPy. El uso transparente de la GPU hace que Theano sea rápido y fácil de configurar, lo cual es bastante crucial para aquellos que recién comienzan. Aunque algunos lo han descrito más como una herramienta de investigación que como un uso de producción, utilícelo en consecuencia.

Una de sus mejores características es una excelente documentación y toneladas de tutoriales. Gracias a la popularidad de la biblioteca, no tendrá muchos problemas para encontrar recursos que le muestren cómo poner en marcha sus modelos.

Pylearn2

La mayor parte de la funcionalidad de Pylearn2 está construida sobre Theano, por lo que tiene una base bastante sólida.

Según el sitio web de Pylearn2:

Pylearn2 se diferencia de scikit-learn en que Pylearn2 tiene como objetivo proporcionar una gran flexibilidad y hacer posible que un investigador haga casi cualquier cosa, mientras que scikit-learn tiene como objetivo funcionar como una “caja negra” que puede producir buenos resultados incluso si el usuario no No entiendo la implementación.

Tenga en cuenta que Pylearn2 a veces puede envolver otras bibliotecas como scikit-learn cuando tiene sentido hacerlo, por lo que aquí no obtiene un código 100% personalizado. Sin embargo, esto es genial, ya que la mayoría de los errores ya se han solucionado. Wrappers como Pylearn2 tienen un lugar muy importante en esta lista.

Evolución

Una de las áreas más emocionantes y diferentes de la investigación de redes neuronales es el espacio de los algoritmos genéticos. Un algoritmo genético es básicamente una heurística de búsqueda que imita el proceso de selección natural. Esencialmente, prueba una red neuronal en algunos datos y obtiene retroalimentación sobre el rendimiento de la red a partir de una función de aptitud. Luego, iterativamente, realiza pequeños cambios aleatorios en la red y procede a probarla nuevamente con los mismos datos. Las redes con puntajes de condición física más altos ganan y luego se utilizan como padres para las nuevas generaciones.

Pyevolve proporciona un gran marco para construir y ejecutar este tipo de algoritmo. Aunque el autor ha declarado que a partir de la versión 0.6, el marco también es compatible con la programación genética, por lo que en un futuro cercano el marco se inclinará más hacia ser un marco de computación evolutiva que un simple marco de GA.

  • Bueno para: Redes neuronales con algoritmos genéticos
  • Github

NuPIC

NuPIC es otra biblioteca que le proporciona una funcionalidad diferente a la de sus algoritmos ML estándar. Se basa en una teoría del neocórtex llamada Memoria Temporal Jerárquica (HTM). Los HTM se pueden ver como un tipo de red neuronal, pero parte de la teoría es un poco diferente.

Fundamentalmente, los HTM son un sistema de memoria jerárquico basado en el tiempo que se puede entrenar con varios datos. Está destinado a ser un nuevo marco computacional que imita cómo la memoria y la computación se entrelazan dentro de nuestros cerebros. Para una explicación completa de la teoría y sus aplicaciones, consulte el [papel blanco](http://numenta.com/assets/pdf/whitepapers/hierarchical-temporal-memory-cortical-learning-algorithm-0.2.1-en .pdf).

Patrón

Esta es más una biblioteca de “paquete completo”, ya que proporciona no solo algunos algoritmos de ML, sino también herramientas para ayudarlo a recopilar y analizar datos. La parte de minería de datos lo ayuda a recopilar datos de servicios web como Google, Twitter y Wikipedia. También tiene un rastreador web y un analizador HTML DOM. Lo bueno de incluir estas herramientas es lo fácil que es recopilar y entrenar datos en el mismo programa.

Aquí hay un gran ejemplo de la documentación que usa un montón de tweets para entrenar a un clasificador sobre si un tweet es 'ganador' o 'fallido':

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
from pattern.web import Twitter
from pattern.en import tag
from pattern.vector import KNN, count

twitter, knn = Twitter(), KNN()

for i in range(1, 3):
    for tweet in twitter.search('#win OR #fail', start=i, count=100):
        s = tweet.text.lower()
        p = '#win' in s and 'WIN' or 'FAIL'
        v = tag(s)
        v = [word for word, pos in v if pos == 'JJ'] # JJ = adjective
        v = count(v) # {'sweet': 1}
        if v:
            knn.train(v, type=p)

print knn.classify('sweet potato burger')
print knn.classify('stupid autocorrect')

Los tweets se recopilan primero usando twitter.search() a través de los hashtags '#win' y '#fail'. Luego, se entrena un k-vecino más cercano (KNN) usando adjetivos extraídos de los tweets. Después de suficiente entrenamiento, tienes un clasificador. No está mal para solo 15 líneas de código.

  • Bueno para: PNL, agrupamiento y clasificación
  • Github

Café

Caffe es una biblioteca para el aprendizaje automático en aplicaciones de visión. Puede usarlo para crear redes neuronales profundas que reconozcan objetos en imágenes o incluso para reconocer un estilo visual.

Se ofrece una integración perfecta con el entrenamiento de GPU, lo cual es muy recomendable para cuando estás entrenando en imágenes. Aunque esta biblioteca parece ser principalmente para académicos e investigación, también debería tener muchos usos para entrenar modelos para uso en producción.

  • Bueno para: redes neuronales/aprendizaje profundo para la visión
  • Sitio web
  • Github

Otras bibliotecas notables

Y aquí hay una lista de algunas otras bibliotecas de Python ML que existen. Algunos de ellos brindan la misma funcionalidad que los anteriores, y otros tienen objetivos más específicos o están más destinados a ser utilizados como herramientas de aprendizaje.

Nilearn

  • Construido sobre scikit-learn
  • Github

Modelos de estado

PyBrain (inactivo)

Combustible

Beto

skdata

LECHE

IEPY

consulta

Hebel

mlxtend

no aprender

Rampa

Forja de funciones {#forja de funciones}

REPRESENTANTE

Python-ELM

PythonXY

####XCS

PyML

MLPY (inactivo)

Naranja

Monte

PYMVPA

MDP (inactivo)

Shogún

PyMC

generación

Neurolaboratorio

FFnet (inactivo)

LibSVM

menta verde

Cadena

tema

Cangrejo

Árbol de portada

abedules

muerto

neurolaboratorio

Hierbabuena

yahmm

profundo

Enojarse

neón

sentimiento