Software de aprendizaje automático de Python



Hoy en día hay una gran cantidad de herramientas de software para crear modelos de Machine Learning. La primera de estas herramientas se formó entre científicos y estadísticos, donde los lenguajes R y Python son ecosistemas populares e históricamente desarrollados para procesar, analizar y visualizar datos en estos lenguajes, aunque existen ciertas bibliotecas de aprendizaje automático para Java, Lua, C ++. Además, los lenguajes de programación interpretados son mucho más lentos que los compilados, por lo tanto, la preparación de datos y la estructura de los modelos se describen en el lenguaje interpretado, y los cálculos principales se realizan en el lenguaje compilado.

En esta publicación, hablaremos principalmente de bibliotecas que tienen una implementación de Python, ya que este lenguaje tiene una gran cantidad de paquetes para la integración en varios servicios y sistemas, así como para escribir varios sistemas de información. El material contiene una descripción general de bibliotecas bien conocidas y será útil principalmente para aquellos que comienzan a estudiar el campo de ML y desean comprender aproximadamente dónde buscar implementaciones de ciertos métodos.

Al elegir paquetes específicos para resolver problemas, lo primero que debe decidir es si tienen un mecanismo para resolver sus problemas. Entonces, por ejemplo, para el análisis de imágenes, lo más probable es que tenga que lidiar con redes neuronales y para trabajar con texto: con redes recurrentes, con una pequeña cantidad de datos, las redes neuronales probablemente tendrán que abandonarse.

Bibliotecas de uso general en Python


Todos los paquetes descritos en esta sección se utilizan de alguna manera para resolver casi cualquier tarea de aprendizaje automático. A menudo son suficientes para construir todo el modelo, al menos en la primera aproximación.

Numpy


Una biblioteca de código abierto para realizar operaciones de álgebra lineal y transformaciones numéricas. Como regla, tales operaciones son necesarias para convertir conjuntos de datos, que pueden representarse como una matriz. La biblioteca ha implementado una gran cantidad de operaciones para trabajar con matrices multidimensionales, transformadas de Fourier y generadores de números aleatorios. Los formatos de almacenamiento Numpy son el estándar de facto para almacenar datos numéricos en muchas otras bibliotecas (por ejemplo, Pandas, Scikit-learn, SciPy).

Sitio web : www.numpy.org

Pandas


Biblioteca para el procesamiento de datos. Con su ayuda, puede descargar datos de casi cualquier fuente (integración con los principales formatos de almacenamiento de datos para el aprendizaje automático), calcular varias funciones y crear nuevos parámetros, crear consultas de datos utilizando funciones agregadas similares a las implementadas en SQL. Además, hay una variedad de funciones de transformación de matriz, un método de ventana deslizante y otros métodos para obtener información de los datos.

Sitio web : pandas.pydata.org

Scikit-learn


Una biblioteca de software con más de una década de historia contiene implementaciones de casi todas las transformaciones posibles, y a menudo solo es suficiente para implementar completamente el modelo. Como regla general, cuando se programa casi cualquier modelo en Python, algunas transformaciones que usan esta biblioteca siempre están presentes.
Scikit-learn contiene métodos para dividir un conjunto de datos en pruebas y capacitación, calcular métricas básicas sobre conjuntos de datos y realizar validación cruzada. La biblioteca también tiene los algoritmos básicos para el aprendizaje automático: regresión lineal (y sus modificaciones de lazo, regresión de cresta), vectores de soporte, árboles de decisión y bosques, etc. También hay implementaciones de los principales métodos de agrupamiento. Además, la biblioteca contiene métodos utilizados constantemente por los investigadores para trabajar con parámetros (características): por ejemplo, reducir la dimensión utilizando el método del componente principal. La biblioteca imblearn es parte del paquete, lo que le permite trabajar con muestras desequilibradas y generar nuevos valores.

Sitio web : www.scikit-learn.org

Scipy


Una biblioteca bastante extensa diseñada para la investigación. Incluye un amplio conjunto de funciones del análisis matemático, incluido el cálculo de integrales, la búsqueda de funciones máximas y mínimas, para procesar señales e imágenes. En muchos sentidos, esta biblioteca puede considerarse un análogo del paquete MATLAB para desarrolladores en lenguaje Python. Con su ayuda, puede resolver sistemas de ecuaciones, usar algoritmos genéticos y realizar muchas tareas de optimización.

Sitio web : www.scipy.org

Bibliotecas específicas


En esta sección, se consideran las bibliotecas con un campo específico de aplicabilidad o populares con un número limitado de usuarios.

Tensorflow


Una biblioteca desarrollada por Google para trabajar con tensores se utiliza para construir redes neuronales. El soporte para la computación en tarjetas gráficas tiene una versión para el lenguaje C ++. Sobre la base de esta biblioteca, las bibliotecas de nivel superior están construidas para trabajar con redes neuronales en el nivel de capas completas. Entonces, hace algún tiempo, la popular biblioteca de Keras comenzó a usar Tensorflow como el back-end principal para los cálculos en lugar de la biblioteca similar de Theano. La biblioteca cuDNN se usa para trabajar en tarjetas gráficas NVIDIA. Si trabaja con imágenes (con redes neuronales convolucionales), lo más probable es que tenga que usar esta biblioteca.

Sitio web : www.tensorflow.org

Keras


Una biblioteca para construir redes neuronales que admite los principales tipos de capas y elementos estructurales. Admite redes neuronales recurrentes y convolucionales, incorpora la implementación de arquitecturas de redes neuronales conocidas (por ejemplo, VGG16). Hace algún tiempo, las capas de esta biblioteca estuvieron disponibles dentro de la biblioteca Tensorflow. Hay funciones listas para trabajar con imágenes y texto (incrustación de palabras, etc.). Integrado en Apache Spark utilizando la distribución dist-keras.

Sitio web : www.keras.io

Cafe


Un marco para la formación de redes neuronales de la Universidad de Berkeley. Al igual que TensorFlow, utiliza cuDNN para trabajar con tarjetas gráficas NVIDIA. Contiene la implementación de redes neuronales más conocidas, uno de los primeros marcos integrados en Apache Spark (CaffeOnSpark).

Sitio web : cafee.berkeleyvision.org

pyTorch


Le permite portar la biblioteca Torch para el lenguaje Lua al lenguaje Python. Contiene implementaciones de algoritmos para trabajar con imágenes, operaciones estadísticas y herramientas para trabajar con redes neuronales. Por separado, puede crear un conjunto de herramientas para algoritmos de optimización (en particular, el descenso de gradiente estocástico).

Sitio web : www.torch.ch

Implementaciones de refuerzo de gradiente sobre árboles de decisión


Tales algoritmos invariablemente causan un mayor interés, ya que a menudo muestran mejores resultados que las redes neuronales. Esto es especialmente cierto si no tiene conjuntos de datos muy grandes (una estimación muy aproximada: miles y decenas de miles, pero no decenas de millones). Entre los modelos ganadores en la plataforma competitiva kaggle, los algoritmos de aumento de gradiente sobre los árboles de decisión son bastante comunes.
Como regla general, las implementaciones de dichos algoritmos se encuentran en bibliotecas de aprendizaje automático de base amplia (por ejemplo, en Scikit-learn). Sin embargo, hay implementaciones especiales de este algoritmo, que a menudo se pueden encontrar entre los ganadores de varias competiciones. Vale la pena resaltar lo siguiente.

Xgboost


La implementación más común de aumento de gradiente. Habiendo aparecido en 2014, en 2016 ya había ganado una considerable popularidad. La clasificación y los modelos basados ​​en el análisis de histograma se utilizan para seleccionar la partición.

Sitio web : github.com/dmlc/xgboost

Lightgbm


Opción de aumento de gradiente de Microsoft, lanzada en 2017. El muestreo de un lado basado en gradiente (GOSS) se utiliza para seleccionar el criterio de partición. Existen métodos para trabajar con atributos categóricos, es decir con letreros que no se expresan explícitamente por número (por ejemplo, el nombre del autor o la marca del automóvil). Es parte del proyecto DMTK de Microsoft dedicado a la implementación de enfoques de aprendizaje automático para .Net.

Sitio web : www.dmtk.io

Catboost


El desarrollo de Yandex, que, como LightGBM, se lanzó en 2017, implementa un enfoque especial para el procesamiento de características categóricas (basado en la codificación objetivo, es decir, la sustitución de características categóricas con estadísticas basadas en el valor pronosticado). Además, el algoritmo contiene un enfoque especial para la construcción del árbol, que mostró los mejores resultados. Nuestra comparación mostró que este algoritmo funciona mejor que otros directamente fuera de la caja, es decir, sin establecer ningún parámetro.

Sitio web : catboost.yandex

Kit de herramientas cognitivas de Microsoft (CNTK)


El marco de Microsoft Corporation tiene una interfaz C ++. Proporciona implementación de varias arquitecturas de redes neuronales. Puede ser una integración interesante con .Net.

Sitio web : www.microsoft.com/en-us/cognitive-toolkit

Otros recursos de desarrollo


A medida que el aprendizaje automático se ha vuelto más popular, los proyectos han aparecido repetidamente para simplificar el desarrollo y llevarlo en forma gráfica con acceso en línea. En este campo, se pueden observar varios.

Azure ML


Servicio de aprendizaje automático en la plataforma Microsoft Azure, en el que puede generar procesamiento de datos en forma de gráficos y realizar cálculos en servidores remotos, con la capacidad de incluir código Python y otros.

Sitio web: azure.microsoft.com/ru-ru/services/machine-learning-studio

Experiencia de IBM DataScience (IBM DSX)


Un servicio para trabajar en el entorno de Jupyter Notebook con la capacidad de realizar cálculos en Python y otros. Admite la integración con conjuntos de datos conocidos y Spark, un proyecto de IBM Watson.

Sitio web : ibm.com/cloud/watson-studio

Paquetes de ciencias sociales


Entre ellos se encuentran el Paquete Estadístico de IBM para las Ciencias Sociales (SPSS), un producto de software de IBM para procesar estadísticas en las ciencias sociales, que admite una interfaz gráfica para establecer el proceso de procesamiento de datos. Hace algún tiempo, se hizo posible integrar algoritmos de aprendizaje automático en la estructura general de ejecución. En general, el soporte limitado para algoritmos de aprendizaje automático se está volviendo popular entre los paquetes estadísticos que ya incluyen funciones estadísticas y métodos de visualización (por ejemplo, Tableau y SAS).

Conclusión


La elección del paquete de software sobre la base de la cual se resolverá la tarea generalmente está determinada por las siguientes condiciones.

  1. El entorno en el que se utilizará el modelo: si se necesita soporte de Spark, qué servicios deben integrarse.
  2. Características de los datos. ¿Cuáles son los datos: imagen, texto, o es un conjunto de números, qué procesamiento necesitan?
  3. La predisposición de los modelos a este tipo de tarea. Los datos de las imágenes generalmente son procesados ​​por redes neuronales convolucionales, y los algoritmos basados ​​en árboles de decisión se utilizan para pequeños conjuntos de datos.
  4. Limitaciones en la potencia informática, tanto en formación como en uso.

Como regla general, cuando se desarrolla en Python, no se puede evitar el uso de bibliotecas de uso general (Pandas, Scikit-learn, numPy). Esto llevó al hecho de que su interfaz es compatible con la mayoría de las bibliotecas especializadas, pero si este no es el caso, debe comprender que tendrá que escribir los conectores usted mismo o elegir otra biblioteca.

Puede construir el primer modelo utilizando un número relativamente pequeño de bibliotecas, y luego tendrá que decidir en qué dedicar tiempo: desarrollar parámetros (ingeniería de características) o elegir la biblioteca y el algoritmo óptimos, o realizar estas tareas en paralelo.

Ahora un poco sobre las recomendaciones para elegir. Si necesita un algoritmo que funcione mejor desde el primer momento, este es Catboost. Si tiene la intención de trabajar con imágenes, puede usar Keras y Tensorflow o Caffe. Cuando trabaje con texto, debe decidir si tiene la intención de construir una red neuronal y tener en cuenta el contexto. En caso afirmativo, los mismos deseos que para las imágenes, si una "bolsa de palabras" (características de frecuencia de la aparición de cada palabra) es suficiente, los algoritmos de aumento de gradiente son adecuados. Con pequeños conjuntos de datos, puede usar los algoritmos para generar nuevos datos a partir de Scikit-learn y métodos lineales implementados en la misma biblioteca.

Como regla general, las bibliotecas descritas son suficientes para resolver la mayoría de los problemas, incluso para ganar concursos. El campo del aprendizaje automático se está desarrollando muy rápido: estamos seguros de que ya aparecieron nuevos marcos al momento de escribir esta publicación.

Nikolay Knyazev, jefe del grupo de aprendizaje automático Jet Infosystems

Source: https://habr.com/ru/post/es415997/


All Articles