¿Cuál es la diferencia entre el aprendizaje automático en Python y R?

Premisa: esta es una pregunta típica de Quora: muy subjetiva y algo polarizante. Lo intentaré porque a) creo que algunas de las respuestas votadas son realmente incorrectas o están fechadas, b) después de haber usado estos dos idiomas durante algún tiempo (R desde 2000, Python desde 2005), creo que tengo un poco de perspectiva histórica, que podría ser útil para responder cuál es la diferencia entre los idiomas y no qué es mejor (para un elogio calificado de R, tengo otra respuesta de Quora).

¿Cuáles son las similitudes ?

Mucho más que las diferencias.

  1. Ambos son lenguajes de propósito general, hasta cierto punto. R no es una DSL y, al mismo tiempo, Python no está destinado a crear aplicaciones grandes.
  2. Ambos lenguajes son dinámicos, flexibles y bastante lentos (R es más lento, por las razones que se describen a continuación).
  3. Ambos tienen un gran ecosistema y una gran base de usuarios.
  4. Con el tiempo, y cuando se trata de Machine Learning, ambos se han convertido principalmente en lenguajes de interfaz . Son demasiado lentos (o demasiado difíciles de convertir en lenguajes rápidos, aparentemente) para realizar operaciones nativas, no vectorizadas; y no están diseñados para el paralelismo. Por otro lado, son adecuados para crear secuencias de comandos y llamar a grandes bibliotecas que pueden contener DSL. En esta etapa, las diferencias entre ellos son bastante menores. Ambos tienen un excelente soporte para:
    1. TensorFlow / Keras;
    2. Chispa – chispear;
    3. H2O;
    4. Stan;
    5. Todos los métodos de aprendizaje estadístico más comunes.

Las diferencias en el rendimiento entre los dos idiomas son menores, porque la biblioteca realiza el cálculo y ambos idiomas pasan los datos por valor (principalmente).

Cuales son las diferencias ?

  1. En grandes conjuntos de datos numéricos, mi impresión es que Python es más rápido y más flexible . Podrá elegir flotadores largos / cortos y cambiar el almacenamiento por precisión. Y, Python tiene más bibliotecas para la gestión de datos de tamaño mediano (pytable, dask); Estos pueden ser útiles. En R, cuando trato con grandes datos fuera del núcleo, mi enfoque ha sido confiar en DBMS estándar (pPostgres, servidor MS, con el cual R tiene integración nativa, Redshift). Como beneficio adicional, dplyr en R ofrece una interfaz excelente y fácil para estas bases de datos.
  2. Python tiene formas de acelerar el rendimiento sin recurrir a C ++. Cython es el recurso más común para obtener una velocidad C-comparable, seguido de Numba. Nada de eso existe en R.
  3. Python tiene dos bibliotecas ubicuas y monolíticas utilizadas por los aprendices de máquinas: Pandas para munging de datos y Scikit-learn para modelar. Por el contrario, R tiene muchas bibliotecas especializadas más pequeñas.
  4. Por el contrario, para la visualización, R tiene relativamente pocas bibliotecas (ggplot2, ggvis) y Python tiene muchas (matplotlib, seaborn, vincent, altair, bokeh …). Sin embargo, creo que la mayoría de la gente estaría de acuerdo en que R es mejor en la visualización, porque Hadley Wickham básicamente lo hizo bien en su segundo intento. Python está en un estado lamentable aquí.
  5. La comunidad R parece haberse unido en torno a dos entornos de desarrollo: Rstudio (gran mayoría) y … todos los demás. Python tiene muchas más opciones, pero tengo la impresión de que los desarrolladores usan principalmente ipython, pycharm y quizás spyder. Personalmente, encuentro a Rstudio un IDE excepcional en cualquier idioma. Es un fuerte diferenciador.
  6. El tidyverse es una biblioteca de datos que simultáneamente a) extiende el lenguaje; b) promueve una “filosofía de análisis de datos” y buenas prácticas de programación. Es una cosa R muy peculiar, aunque se puede portar a otros idiomas. Muchas personas (incluido yo) consideran que es una excelente manera de organizar el pensamiento, los datos y el análisis. Python no tiene nada de este tipo.
    En general, diría que una diferencia entre el código R y el código Python es que el primero generalmente está organizado en torno a funciones y programación funcional, mientras que el segundo usa objetos con mucha más frecuencia. Aún ahora, me parece demasiado heterodoxo usar pytoolz (una buena biblioteca funcional) en mi código. La mayoría del código que ve tiene instancias de objeto y cadenas de método largas.

Entonces, ¿cuáles son las diferencias profundas (adjetivo popular en estos días)? Creo que se pueden ver a través de los orígenes de los idiomas. R fue diseñado para análisis de datos interactivos. Sus diseñadores y colaboradores iniciales (Chambers, Ihaka, Gentleman, Tierney) se sumergieron en la programación funcional (por ejemplo, leyeron On Abandoning XLISP-STAT de Luke Tierney) y modelaron la semántica del lenguaje en Scheme, mientras tomaban prestada parte de la sintaxis de APL. También tomaron una decisión consciente de establecer valores predeterminados para las conversiones de tipo y promociones para que el análisis interactivo fuera lo más productivo posible. Desde el principio, las operaciones algebraicas en vectores numéricos se extendieron a NaN, NA e Inf, a expensas de un cómputo más lento. El alcance léxico y la metaprogramación en R es extremadamente flexible, lo que permite una evaluación no estándar (que es muy útil en el análisis de datos).

Python, por otro lado, tiene sus raíces en ABC, un lenguaje en el que Van Rossum trabajó en los años 80. El objetivo inicial de Python era ser un lenguaje bien diseñado para la educación, y presentar a los estudiantes universitarios a la programación a través de Python fue un enfoque temprano del lenguaje, a través de la iniciativa DARPA CP4E (Programación de computadoras para todos). La claridad y el buen diseño siempre fueron de suma importancia en la mente de Guido. No creo que no le guste la programación funcional, por ejemplo, pero no le gusta la presencia de lambdas, mapas y filtros en python, porque se sienten cosidos. Incluso si las personas a menudo asocian Python a la computación numérica, eso es un accidente histórico, el subproducto de alternativas deficientes de código abierto (por ejemplo, Octave) y de la existencia de un par de hombres clave como Jim Hugunin y Travis Oliphant.

Estas raíces todavía se muestran hoy. R tiene probablemente la cadena de herramientas y la filosofía más integradas y coherentes que lo llevan de los datos sin procesar a los datos transformados, del modelo a la visualización y la salida final (a través de brillante o rmarkdown). Python es el último lenguaje de scripting, bien diseñado, robusto, flexible y lo suficientemente rápido. Si tiene que integrar la salida de un análisis en un proceso grande y heterogéneo ya escrito en Python, probablemente solo tenga una opción. Por otro lado, R brilla si está realizando muchos análisis a medida, incluidos análisis exploratorios, interactivos y / o la integración con un proceso de producción preexistente no es demasiado difícil.

Python y R han estado en disputa desde que se introdujo Python. Sin embargo, en los últimos tiempos Python se ha convertido en el lenguaje de elección para la mayoría de la industria, ya que se integra fácilmente con su flujo de trabajo de producción. Python también demuestra ser mejor para el aprendizaje profundo.

Cuando se trata del aprendizaje automático, creo que es importante entender primero cómo funciona el ecosistema. ¿Cuáles son las habilidades requeridas para un trabajo de aprendizaje automático? El mapeo de las habilidades requeridas para el uso de los idiomas realmente puede ayudarlo a construir una base sólida en el aprendizaje automático.

Solo hay unas pocas características que marcan una diferencia significativa en el uso de Python y R en Machine Learning. Python y R se encuentran entre los lenguajes más populares y tienen sus partidarios y oponentes. Si bien Python es a menudo elogiado por ser un lenguaje de propósito general con una sintaxis fácil de entender, la funcionalidad de R se desarrolla teniendo en cuenta a los estadísticos, lo que le brinda ventajas específicas de campo, como excelentes funciones para la visualización de datos.

Una imagen dice más que mil palabras.

Los datos visualizados a menudo se pueden entender de manera más eficiente y efectiva que los números sin procesar solos. R y la visualización son una combinación perfecta. Algunos paquetes de visualización imperdibles son ggplot2, ggvis, googleVis y rCharts.

Ecosistema R

R tiene un rico ecosistema de paquetes de vanguardia y comunidad activa. Los paquetes están disponibles en CRAN, BioConductor y Github. Puede buscar en todos los paquetes de R en la documentación de R.

R lingua franca de ciencia de datos

R es desarrollado por estadísticos para estadísticos. Pueden comunicar ideas y conceptos a través del código R y los paquetes, no necesariamente necesita una formación en informática para comenzar. Además, se adopta cada vez más fuera de la academia.

R es lento

R fue desarrollado para facilitar la vida de los estadísticos, no la vida de su computadora. Aunque R puede ser experimentado como lento debido a un código mal escrito, existen múltiples paquetes para mejorar el rendimiento de R: pqR, renjin y FastR, Riposte y muchos más.

R tiene una curva de aprendizaje empinada

La curva de aprendizaje de R no es trivial, especialmente si proviene de una GUI para su análisis estadístico. Incluso encontrar paquetes puede llevar mucho tiempo si no está familiarizado con él.

Portátil IPython

IPython Notebook facilita el trabajo con Python y los datos. Puede compartir fácilmente cuadernos con colegas, sin tener que instalar nada. Esto reduce drásticamente la sobrecarga de código de organización, salida y archivos de notas. Esto le permitirá pasar más tiempo haciendo un trabajo real.

Python es un lenguaje de propósito general

Python es un lenguaje de propósito general que es fácil e intuitivo. Esto le da una curva de aprendizaje relativamente plana y aumenta la velocidad a la que puede escribir un programa. En resumen, ¡necesita menos tiempo para codificar y tiene más tiempo para jugar con él! Además, el marco de prueba de Python es un marco de prueba incorporado de baja barrera de entrada que fomenta una buena cobertura de prueba. Esto garantiza que su código sea reutilizable y confiable.

Python es un lenguaje multipropósito

Python reúne a personas con diferentes orígenes. Como lenguaje común y fácil de entender que los programadores conocen y que los estadísticos pueden aprender fácilmente, puede crear una herramienta única que se integre con cada parte de su flujo de trabajo.

Visualización de Python

Las visualizaciones son un criterio importante al elegir el software de análisis de datos. Aunque Python tiene algunas bibliotecas de visualización agradables, como Seaborn, Bokeh y Pygal, quizás haya demasiadas opciones para elegir. Además, en comparación con R, las visualizaciones suelen ser más complicadas, y los resultados no siempre son tan agradables a la vista.

Python es un retador

Python es un desafío para R. No ofrece una alternativa a los cientos de paquetes esenciales de R. Aunque se está poniendo al día, todavía no está claro si esto hará que las personas abandonen R?

Descargo de responsabilidad: soy cofundador de @GreyAtom y ayudo a talentos de ingeniería a encontrar carreras sostenibles en tecnologías emergentes.

El programa insignia altamente selectivo de GreyAtom tiene como objetivo orientar a los profesionales que trabajan y los más novedosos en el inicio de su carrera de ciencia de datos. Los estudiantes crearon proyectos a partir de conjuntos de datos REALES y declaraciones de problemas proporcionadas por nuestra industria y socios de contratación. El programa se basa en el aula y está fuertemente orientado a la práctica. GreyAtom es un ecosistema donde los estudiantes pueden aprovechar lo mejor de la academia, profesionales de la industria y personas influyentes.

Algunos enlaces rápidos

No existe una diferencia importante como tal entre python y R, cuando se trata de hacer algoritmos de aprendizaje, enfoque, pruebas, métricas, etc. Pero aquí hay algunos.

  1. Python es un lenguaje de programación funcional de primera clase para todo tipo (programación de sistemas, gráficos, aplicaciones, aprendizaje web y máquina) de desarrollo de software, mientras que R es más como una herramienta especialmente diseñada para la ciencia de datos
  2. R tiene bibliotecas relativamente más diversas para la ciencia de datos que python (por razones históricas), pero python se ha puesto al día con R y está superando rápidamente.
  3. Ambos soportan Uy y programación funcional.
  4. Es mucho más fácil dockerizar un modelo ML y exponerlo en una API RESTful en Python que en R (tal vez sea posible con mucha dificultad en R, estoy sesgado hacia Python en esta área)
  5. Puede diseñar una arquitectura sin servidor en python e implementar la función en un servicio en la nube como aws usando el servicio lambda, muy difícil en R también lograr esto.

Los conceptos de aprendizaje automático son los mismos en ambos idiomas, solo que la escritura del código es diferente. R históricamente tiene más disponibilidad de diferentes paquetes, pero generalmente es más lento en comparación con Python. Python también se considera mejor para el aprendizaje profundo.

Realmente puede usar la programación combinada de R / Python para orquestar código Python y R en proyectos de aprendizaje automático. Se desarrollan herramientas adicionales útiles para facilitar el desarrollo de modelos predictivos en entornos multilingües. Para un intercambio rápido de datos entre ellos podemos usar el formato de archivo de datos binarios Feather. Otra herramienta independiente del lenguaje Data Version Control puede hacer que el proyecto sea reproducible. Aquí hay un ejemplo de cómo usar DVC para orquestar el código R y Python en lugar de los scripts de shell normales:

Mejores prácticas para orquestar código Python y R en proyectos de ML : en este ejemplo, se decidió que el clasificador Random Forest debería implementarse en Python en lugar de R para alcanzar un mejor rendimiento.

Hay un libro con el título “Estadísticas para el aprendizaje automático” cuya portada se adjunta a continuación. Allí encontrará ejemplos de algoritmos de aprendizaje automático como k-means o KNN implementados en ambos lenguajes, Python y R.

Al examinar esos ejemplos, verá que en algunos casos Python requerirá menos líneas de código, mientras que en otros casos es R, que es más delgado. Entonces, para el aprendizaje automático no supervisado, los dos idiomas son equivalentes en términos de potencia y número de paquetes.

Sin embargo, si necesita utilizar algoritmos de aprendizaje profundo, en particular para el procesamiento de texto, entonces es Python, que es mucho mejor, ya que las bibliotecas que Python ofrece para este tipo de tarea son inmejorables. TensorFlow y PyTorch son algunos de esos.

Además, Python se integra mejor con el resto de su análisis, ya que es un lenguaje de propósito general. Cuando tienes que hacer prototipos rápidos usando Python es tan fácil como comer un pedazo de pastel. Entonces, sí, Python tiene una cierta ventaja principalmente porque además de ofrecer una de las mejores colecciones de bibliotecas de aprendizaje automático también es un lenguaje de propósito general. Sin embargo, en lo que respecta a los algoritmos de aprendizaje profundo, R se está poniendo al día. Finalmente, hay Octave como una tercera opción para el aprendizaje profundo.

Para el aprendizaje profundo, Python es el rey. Ningún otro lenguaje de programación se acerca.

Para el aprendizaje automático “regular”, la diferencia es la siguiente: R tiene muchos, muchos paquetes ML en el ecosistema CRAN, superando con creces lo que Python puede ofrecer. Algunos de ellos son realmente buenos y otros no tan buenos. Python básicamente tiene un paquete ML serio, y es scikit-learn, pero en mi opinión es la mejor biblioteca de aprendizaje automático que existe.

La principal ventaja de R son todos los paquetes científicos que no son exactamente paquetes de ML per se, pero que pueden ser muy útiles en proyectos de ML. Por ejemplo, paquetes para análisis de series temporales y todo tipo de computación estadística. Aquí es donde brilla R.

Por otro lado, Python es excelente si desea implementar soluciones analíticas en producción. Es un lenguaje de programación de propósito general, a diferencia de R, y eso tiene sus beneficios.

No hay nada inherente en los idiomas que los haga diferentes para el aprendizaje automático.

Es el soporte de la biblioteca para Machine Learning lo que puede / podría marcar la diferencia.

Considere el paquete H2O.ai. En realidad está escrito en Java. Cuando lo inicializa, inicia un servidor basado en Java. Sin embargo, existen ML API para los diferentes algoritmos H2O ML para Java, Scala, Python y R.

En realidad, para que ML funcione lo suficientemente rápido, los algoritmos subyacentes deben codificarse en un lenguaje más eficiente para ser una biblioteca para usar. Algo como C / C ++ o Java.

Dicho esto, opino que la biblioteca scikit-learn tiene una API un poco más consistente que R. La documentación scikit-learn es generalmente. mejor y más consistente que los muchos paquetes individuales de R.

Para las redes neuronales, Python ha obtenido un mejor soporte de biblioteca que R, por lo que eso favorece a Python.

R tiende a tener un mejor soporte para paquetes estadísticos.

Las diferencias se deben a los efectos del vagón de banda en oposición a cualquier cosa inherente a los idiomas.

También hay un nuevo desarrollo en ML / AI llamado “programación probabilística”. Básicamente es ML para conjuntos de datos dispersos y el uso de estadísticas bayesianas. Hasta ahora era difícil crear modelos más complejos utilizando estadísticas bayesianas debido a las grandes necesidades informáticas de sus métodos de muestreo. Sin embargo, con nuevos enfoques / rutinas y mayor potencia informática, esto ahora es posible. Le permite inferir en base a un conjunto de datos muy limitado.

Muchos (expertos) ven la “programación probabilística” como la tercera ola en ML después de “big data” y “aprendizaje profundo”.

A veces se han desarrollado algunos idiomas nuevos con una aplicación específica en mente, como el reconocimiento de imágenes. STAN es un gran ejemplo de un lenguaje maduro que, no por casualidad, también se puede llamar desde R y Python.

Sin embargo, también hay 2 excelentes paquetes / bibliotecas Python PyMC3 y Edward. No existe tal equivalente en R. Así que es un gran +++ para Python.

  • Tiene más que ver con cómo se va a adquirir su conjunto de datos o cómo se define su canalización. ML in R es mejor conocido como aprendizaje estadístico. Debe crear tuberías para convertir los datos de entrenamiento en estructuras de datos numéricas para el procesamiento. En python, simplemente puede usar módulos para hacer todo el trabajo pesado.
  • Una de las restricciones de R es que almacena los datos en la memoria del sistema (RAM). Por lo tanto, la capacidad de RAM se convierte en una restricción cuando maneja Big Data.
  • Fase de construcción de modelos y predicción. Por lo general, la construcción del modelo se realiza como un proceso por lotes y las predicciones se realizan en tiempo real. El proceso de construcción del modelo es un proceso de cómputo intensivo, mientras que la predicción ocurre en un santiamén. Por lo tanto, el rendimiento de un algoritmo en Python o R realmente no afecta el tiempo de respuesta del usuario.
  • theano> Lasagne> no learn: Bibliotecas en python para redes neuronales: se pueden entrenar en GPU (nvidia, se requiere CUDA) sin ningún ajuste.

Existen principalmente 2 diferencias en los conceptos de ML en Python y R:

  1. Las sintaxis
  2. La disponibilidad de diferentes paquetes (como Recommendedderlab en R y Scikit en Python)

Aparte de eso, no hay absolutamente ninguna diferencia.

Los conceptos de aprendizaje automático siguen siendo los mismos. Solo el código que lo escribe difiere.

Por ejemplo, en la regresión lineal, tanto el recomendado como el scikit usan el método de mínimos cuadrados para calcular los coeficientes de la ecuación Y = ß0 + ß1 * X. Pero el código será diferente; y, por supuesto, en consecuencia, es posible que sea necesario limpiar el formato de las entradas.