Es popular en el aprendizaje automático debido a muchas razones interrelacionadas.
Python es simple, elegante, consistente y matemático.
El código de Python se ha descrito como pseudocódigo legible.
Es fácil de aprender debido a su sintaxis consistente y la forma en que refleja el lenguaje humano y / o sus contrapartes matemáticas. El último (muy debido a bibliotecas como Numpy) es algo que uno apreciaría si implementara un algoritmo de aprendizaje automático cuyo núcleo probablemente sea solo una optimización matemática.
Leer desde un archivo CSV
importar pandas como pd
# Esto lee un archivo cvs en un marco de datos similar a R
dataframe = pd.read_csv (“my_csv_file.csv”)
Un colega (que tiene un doctorado en CS) pasó 1 o 2 días escribiendo código Java desde cero para hacer lo mismo para una competencia de ML.
Tomé apenas 1 minuto para encender iPython (ver más abajo) y escribir lo anterior, aunque le tomó menos tiempo decir # @ $ !.
Al menos la experiencia de doctorado le enseñó a no usar C ++.
La manipulación de datos puede ser muy fácil.
# Suponga que tiene un archivo de texto con líneas en el siguiente formato
# \t
# Aquí se explica cómo recortar las caras y guardarlas
# OpenCV
importar cv2
# Una línea para abrir el archivo; no es necesario importar
con abierto (“my_file.txt”) como archivo:
# Manera pitónica de tener un contador e iterar a través del archivo
para line_number, línea en enumerate (archivo, inicio = 1):
# split (delimitador) es parte del objeto string
imagepath, bounding_box = line.split (‘\ t’)
# Dividir línea en ‘,’ y asignarlos a int
x, y, ancho, alto = mapa (int, bounding_box.split (‘,’))
# Use OpenCV para leer la imagen como matriz Numpy (más información a continuación)
image = cv2.imread (ruta de imagen)
# Recorte de la fila y a la fila y + altura. Del mismo modo para col.
# Nota indexación similar a MATLAB, excepto que se basa en 0
# que es consistente con la mayoría de los idiomas y usa ‘[]’
# para que no tenga que recordar cuándo usar ‘()’, ‘{}’ etc.
# para indexar.
cara = imagen [y: y + altura, x: x + ancho]
cv2.imwrite (“face_” + str (line_number) + “.jpg”, face)
Python es similar a las matemáticas en el sentido de que algunos “objetos” que forman parte del vocabulario de un matemático son parte del lenguaje sin que tenga que instalarlos / importarlos, y se parecen a sus equivalentes matemáticos equivalentes. Con nombres de variables / funciones cuidadosamente elegidos, el código puede leerse como matemáticas o inglés
# Por ejemplo, crear fácilmente una lista, tupla, establecer, dictar
# Observe que puede MEZCLAR tipos. C ++ decir qué?
my_list = [-1, 10, “hola”, 2.4, -1] # Esto es mutable
my_tuple = (“John”, “Doe”, 28, “Hombre”) # Inmutable
my_set = {-1, 10, “hola”, -1, 10} # Conjunto {-1, 10, “hola”}
# Diccionario / mapa hash. Y sí, las funciones son objetos y pueden ser
# almacenado o pasado como argumentos.
my_dict = {“one”: 1, “three”: 3, “square_func”: lambda x: x ** 2}
# Esto se evalúa a 9
my_dict [“square_func”] (3)
# {-1, 10, “hola”, 2.4 “}. El orden puede cambiar ya que el conjunto no está ordenado.
set_from_list = set (mi_lista)
# Filtrado – lista
int_numbers = [elemento para elemento en mi_lista si el tipo (elemento) es int]
# Filtrado: conjunto (solo elementos únicos. Tenga en cuenta el {})
uniq_int_numbers = {n para n en mi_lista si el tipo (n) es int}
# Lista de comprensión
números pares = [n para n en el rango (100) si n% 2 == 0]
squared_even_numbers = [x ** 2 para x en números pares si x <50]
# Declarar función. Léalo en voz alta y observe la similitud con las matemáticas.
def polinomio (x):
retorno x ** 2-10 * x
poly_numbers = [polynomial (x) para x en squared_even_numbers]
Por lo tanto, el tiempo de creación de prototipos y desarrollo es considerablemente más corto en comparación con, por ejemplo, C ++, que ayuda cuando no sabes si una idea que quieres probar funcionará. Esto hace que Python sea especialmente popular entre el ingeniero / investigador / estudiante / profesor que tiene poco tiempo y tiene muchas ideas para probar. Estas personas a su vez influyen en otros para que usen Python para el aprendizaje automático escribiendo bibliotecas de aprendizaje automático, publicando código de investigación o impartiendo cursos (ver aquí y aquí), usando Python.
Ecosistema fantástico
Podría decirse que gran parte (¿o todo?) Del aprendizaje automático es solo matemática, específicamente optimización matemática, estadística y probabilidad. Python gana a los lenguajes tradicionales en que es más fácil “hacer matemáticas” usando Python que con la mayoría de los otros lenguajes. Esto a su vez facilita el aprendizaje automático en Python.
Hay un paquete de Python para casi cualquier función matemática concebible que desee utilizar:
- Álgebra lineal numérica: Numpy
- Computación científica general (p. Ej., Integración, DSP): Scipy
- Optimización convexa: CVXOPT
- Modelado estadístico: Statsmodel, PyMC3
- Álgebra simbólica: SymPy
Ya mencionado anteriormente, pero merece más elaboración, es el ingrediente que hace que Python sea amigable con la informática científica: Numpy, el paquete de álgebra lineal numérica de-factor de Python. Específicamente, la matriz Numpy es el caballo de batalla del ecosistema de computación científica de Python. Permite la expresión rápida y natural de ecuaciones matemáticas debido a su soporte de “vectorización de código” similar a MATLAB. Esto significa que las expresiones matemáticas complicadas cuando se escriben con matrices Numpy que representan vectores / matrices a menudo son solo unas pocas líneas de código.
Aquí hay algunos ejemplos con Numpy.
importar numpy como np
# Entradas de cubo en la matriz (sí, python tiene un operador “potente”)
# Si my_array es [1, 2, 3], entonces array_cube = [1, 8, 27]
array_cube = my_array ** 3
# Multiplicar dos matrices, x, y, de la misma forma, por elementos
x_times_y = x * y
# Log sum exp de valores en una matriz
log_sum_exp_value = np.log (np.sum (np.exp (my_array)))
# Normaliza el vector (cada fila de la matriz X) por su norma L2
X / = np.linalg.norm (X, axis = 1) .reshape (-1, 1)
# Clip / umbral de valores negativos en matriz a 0
X [X <0] = 0
Muchos materiales en línea para aprender Python para ML, etc.
Visite este enlace de Github, o este otro enlace y obtendrá mi punto.
Numpy – “Compatibilidad de datos” entre paquetes
Además, la matriz Numpy se usa como un contenedor común para datos en diferentes bibliotecas. Esto es muy importante ya que permite que las bibliotecas se usen juntas.
Por ejemplo, podría usar Pillow para leer una imagen como una matriz de Numpy, procesarla usando funciones de otra biblioteca como OpenCV y clasificarla usando otra biblioteca de Python como Scikit-learn, o una que tenga enlaces de Python (Caffe, Tensorflow , Pylearn2, Keras, etc.) sin tener que convertir la estructura de datos que aloja sus datos.
Esta “compatibilidad de datos” entre las bibliotecas hace que todo el ecosistema sea “más grande que la suma de sus partes”, ya que facilita que un desarrollador de Python las use en varias combinaciones.
Bibliotecas de aprendizaje automático (y relacionadas).
Quizás en parte debido a la facilidad de codificación en Python y su soporte informático científico, muchas bibliotecas populares de aprendizaje automático están escritas en Python (Scikit-learn, Keras, Pylearn2, Theano, Tensorflow, NLTK) o tienen enlaces de Python (Shogun, Caffe , OpenGM, OpenCV).
Además, el aprendizaje automático no se realiza de forma aislada. A menudo se aplica en algún contexto de aplicación, como visión por computadora, PNL o procesamiento de audio, con la salida de las bibliotecas para estas tareas que se utilizan para construir los vectores de características para los algoritmos de aprendizaje automático.
Por lo tanto, si usted es un desarrollador que ya está familiarizado y usa una biblioteca como OpenCV para el trabajo de visión por computadora, y planea usar una biblioteca de aprendizaje automático, digamos Caffe, para entrenar un modelo de clasificación, todos los cuales son compatibles con Python, entonces qué idioma , Python o C ++, ¿usarías? Por las razones mencionadas anteriormente, probablemente sea más fácil usar la API de Python en lugar de su API de C ++. Ahorre C ++ para la crisis especial de mediana edad / divorcio feo / depresión posparto cuando necesite el empujón final al borde.
Herramientas
Existen varias herramientas que facilitan el aprendizaje automático en Python.
- iPython (ahora portátil Júpiter) para experimentar, grabar y comunicar resultados.
- solicitudes, urllib2 (o 3), Scrapy y otras API web de Python para obtener datos
- Pandas para munging de datos y análisis
- Matplotlib, Seaborn, Mayavi, PCL, etc. para visualizar datos y resultados.
Junto con el hecho de que Python es un lenguaje interpretado, esto permite que Python sea como R y MATLAB para usarse de manera interactiva, lo cual es útil para el análisis de datos (que también hace un uso intensivo de algoritmos ML) y para depurar errores ML.
Fácil de configurar
Si está ejecutando una distribución de Linux, por ejemplo, Ubuntu, Python ya está instalado. Lo mismo para Mac, aunque la versión puede estar desactualizada y es posible que deba instalarla usted mismo utilizando un administrador de paquetes como homebrew o Macports.
En cuanto a Windows, los usuarios de Windows están muertos para mí.
A menudo, instalar un paquete solo requiere que uno escriba algo similar a lo siguiente en el terminal. Las dependencias también se instalarán automáticamente (con raras excepciones, por ejemplo, si el paquete se basa en bibliotecas que no son de Python).
$ pip install
Si usa Virtualenv con Virtualenvwrapper, incluso puede instalar las mismas bibliotecas con diferentes configuraciones en diferentes “entornos” y cambiar entre ellas:
$ workon
$ workon
Facilidad de desplegar un producto
Los lenguajes como Julia, R y MATLAB poseen algunas de las cualidades anteriores que hicieron que Python fuera tan popular para realizar trabajos de aprendizaje automático, aunque en diversos grados. Algunos de ellos son incluso mejores que Python en algunos aspectos. Por ejemplo, Julia, la prometedora candidata al título de Ms Popularidad, apoya la vectorización matemática, tiene excelentes paquetes para la computación científica y es mucho más rápida que Python.
Sin embargo, es más fácil implementar un producto, especialmente uno “basado en la web”, usando Python que con cualquiera de estos lenguajes. Esto se debe a que, a diferencia de estos lenguajes que fueron diseñados exclusivamente para computación científica (R para el modelado de estadísticas, MATLAB para aplicaciones de ingeniería), Python es también un lenguaje de programación general que se usa principalmente para la creación de secuencias de comandos web y admite marcos web establecidos como Django y Flask, además de recursos relacionados como bases de datos (por ejemplo, MongoDB).
Por lo tanto, es fácil incrustar un modelo de aprendizaje automático en un producto escrito en Python (por ejemplo, un servicio web que realiza la clasificación de datos del usuario, como fotos), mientras que a menudo es difícil hacerlo en los otros idiomas.
Como ejercicio sado-masoquista, intente construir un servicio web usando R o MATLAB.
Conclusión
Se necesita un poco de reflexión para darse cuenta de que las razones anteriores están relacionadas entre sí, cada una de las cuales genera comentarios positivos en un ciclo virtuoso que amplifica el efecto o promueve el desarrollo de otro. Esto es lo que hace que Python sea tan especial en este dominio.
Podría decirse que Python no es el mejor para la computación científica (Julia a este respecto parece más prometedor), no está tan bien establecido para el análisis de datos como R, o tan bien equipado como Ruby para un servicio web, pero hace un poco de todo suficientemente bien como para necesitar una solución decente que combine todas estas cualidades, entonces Python es quizás la única solución disponible en este momento.