Python vs R para aprendizaje automático


101

Estoy empezando a desarrollar una aplicación de aprendizaje automático para fines académicos. Actualmente estoy usando R y entrenándome en ello. Sin embargo, en muchos lugares, he visto personas que usan Python .

¿Qué utilizan las personas en la academia y la industria, y cuál es la recomendación?


3
Bueno, ¿qué tipo de aprendizaje automático (imagen / video? PNL? Financiero? Astronomía?), Qué clasificadores, qué conjuntos de datos de tamaño (Mb? Gb? Tb?), Qué escala, qué latencia, en qué plataforma (móvil / computadora individual / multinúcleo / cluster / nube) ...? ¿Qué bibliotecas específicas usará / necesitará su aplicación y ha verificado lo que está disponible en cada idioma? ¿Estás construyendo una aplicación de juguete para tu aprendizaje personal o importa si alguna vez se productiza? ¿Utilizando código abierto o propietario? ¿Trabajará con otras personas o aplicaciones existentes, y qué utilizan / admiten? Interfaz web / GUI? etc
smci

1
Una observación es que Python es más utilizado por personas de aprendizaje automático que trabajan con grandes conjuntos de datos, mientras que R es más utilizado por "estadísticos" tradicionales, por ejemplo, aquellos que trabajan con experimentos de psicología con cientos de puntos de datos. Aunque esa diferencia podría estar disminuyendo.
xji

pitón todo el camino hombre! Hago 4 veces las cosas que hacen mis colegas en un día. Y puede usar python para todo tipo de tareas de programación, no solo de aprendizaje automático.
Francesco Pegoraro

Respuestas:


91

Algunas diferencias realmente importantes a tener en cuenta al elegir R o Python sobre el otro:

  • El aprendizaje automático tiene 2 fases. 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. Python 1, R 1.
  • Producción: La verdadera diferencia entre Python y R viene en estar listo para la producción. Python, como tal, es un lenguaje de programación completo y muchas organizaciones lo usan en sus sistemas de producción. R es un software de programación estadística favorecido por muchos académicos y debido al aumento en la ciencia de datos y la disponibilidad de bibliotecas y al ser de código abierto, la industria ha comenzado a usar R. Muchas de estas organizaciones tienen sus sistemas de producción en Java, C ++, C #, Python, etc. Entonces, idealmente, les gustaría tener el sistema de predicción en el mismo idioma para reducir los problemas de latencia y mantenimiento. Python 2, R 1.
  • Bibliotecas: Ambos idiomas tienen bibliotecas enormes y confiables. R tiene más de 5000 bibliotecas que atienden a muchos dominios, mientras que Python tiene algunos paquetes increíbles como Pandas, NumPy, SciPy, Scikit Learn, Matplotlib . Python 3, R 2.
  • Desarrollo: Tanto el lenguaje son idiomas interpretados. Muchos dicen que Python es fácil de aprender, es casi como leer inglés (para ponerlo en una nota más clara) pero R requiere más esfuerzo de estudio inicial. Además, ambos tienen buenos IDEs (Spyder, etc. para Python y RStudio para R). Python 4, R 2.
  • Velocidad: el software R inicialmente tuvo problemas con cálculos grandes (por ejemplo, como multiplicaciones de matriz nxn). Pero, este problema se aborda con la introducción de R por parte de Revolution Analytics. Han reescrito operaciones intensivas de cálculo en C, que es increíblemente rápido. Python siendo un lenguaje de alto nivel es relativamente lento. Python 4, R 3.
  • Visualizaciones: en ciencia de datos, con frecuencia tendemos a trazar datos para mostrar patrones a los usuarios. Por lo tanto, las visualizaciones se convierten en un criterio importante para elegir un software y R mata completamente a Python a este respecto. Gracias a Hadley Wickham por un increíble paquete ggplot2. R gana sin dudas. Python 4, R 4.
  • Manejo de Big Data: 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. Python funciona bien, pero diría que, ya que tanto R como Python tienen conectores HDFS, aprovechar la infraestructura de Hadoop proporcionaría una mejora sustancial del rendimiento. Entonces, Python 5, R 5.

Entonces, ambos idiomas son igualmente buenos. Por lo tanto, dependiendo de su dominio y el lugar donde trabaje, debe elegir inteligentemente el idioma correcto. El mundo de la tecnología generalmente prefiere usar un solo idioma. Los usuarios comerciales (análisis de marketing, análisis minorista) generalmente utilizan lenguajes de programación estadística como R, ya que con frecuencia realizan prototipos rápidos y crean visualizaciones (que se realiza más rápido en R que en Python).


15
R apenas supera a Python en la visualización. Creo que es más bien lo contrario; Python no solo tiene ggplot (que no uso yo mismo, ya que hay más opciones pitónicas, como seaborn ), sino que incluso puede hacer una visualización interactiva en el navegador con paquetes como bokeh .
Emre

10
Además, R tiene la capacidad de interactuar con Shiny.
stanekam

13
Bibliotecarios: no estoy de acuerdo en absoluto con eso. R es, con mucho, el conjunto de herramientas más rico, y más que eso, proporciona la información de manera adecuada, en parte al heredar S, en parte por una de la comunidad más grande de expertos reputados.
rapaio

34
"El software Speed: R inicialmente tuvo problemas con los cálculos grandes (digamos, como las multiplicaciones de matrices nxn). Pero, este problema se aborda con la introducción de R por parte de Revolution Analytics. Han reescrito operaciones intensivas de cálculo en C, que es increíblemente rápido". Python es un lenguaje de alto nivel es relativamente lento ". No soy un usuario experimentado de R, pero hasta donde sé casi todo con implementaciones de bajo nivel en R también tiene una implementación de bajo nivel similar en numpy / scipy / pandas / scikit-learn / lo que sea. Python también tiene numba y cython. Este punto debería ser un empate.
Dougal

8
Para su comentario "Tratando con Big Data", agregaría que python es uno de los 3 idiomas soportados por apache spark, que tiene velocidades increíblemente rápidas. Su comentario acerca de que R tiene un backend C es verdadero, pero también lo es Python, la biblioteca scikitlearn es muy rápida. Creo que su publicación tiene un buen equilibrio, pero afirmo que la velocidad es al menos un empate, y la escalabilidad (es decir, el manejo de grandes datos) está ciertamente a favor de Python.
Jagartner

23

No hay nada como "Python es mejor" o "R es mucho mejor que x".

Lo único que sé es que en la industria muchas personas se apegan a Python porque eso es lo que aprendieron en la universidad. La comunidad de Python es realmente activa y tiene algunos marcos excelentes para ML y minería de datos, etc.

Pero para ser honesto, si obtienes un buen programador c, él puede hacer lo mismo que la gente hace en python or r, si tienes un buen programador java, él también puede hacer (casi) todo en java.

Así que quédate con el idioma con el que te sientas cómodo.


55
¿Pero qué hay de las bibliotecas? Hay paquetes R avanzados (piense en Ranfom Forest o Caret) que no serían prácticos para reimplementar en un lenguaje de propósito general como C o Java
Santiago Cepas

mahout es decir, admite bosque aleatorio para java
Johnny000

1
Sí, tal vez, pero R no ofrece el rendimiento que necesita para procesar grandes conjuntos de datos y la mayoría de las veces tiene grandes conjuntos de datos en uso industrial.
Johnny000

1
Sí, un buen programador puede hacer lo mismo en C. PERO un mal programador puede hacerlo en Python tan rápido como un programador experimentado puede hacerlo en C.
Pithikos

1
No creo que eso sea siempre cierto @Pithikos Dadas las fórmulas matemáticas subyacentes, generalmente puedo implementarlas más rápido con VB / T-SQL más rápido de lo que puedo vadeando la sintaxis innecesariamente arcana para las bibliotecas R o Python. Y en el proceso, haga que el código resultante sea mucho más escalable. Me alegra que existan estas bibliotecas, pero hay desventajas incorporadas en ellas; En algunas situaciones y proyectos particulares es mejor evitarlos.
SQLServerSteve

16

Algunos pensamientos adicionales.

El lenguaje de programación 'per se' es solo una herramienta. Todos los lenguajes fueron diseñados para hacer que algunos tipos de construcciones sean más fáciles de construir que otros. Y el conocimiento y dominio de un lenguaje de programación es más importante y efectivo que las características de ese lenguaje en comparación con otros.

Hasta donde puedo ver, hay dos dimensiones de esta pregunta. La primera dimensión es la capacidad de explorar, construir pruebas de conceptos o modelos a un ritmo rápido, eventualmente teniendo a la mano suficientes herramientas para estudiar lo que está sucediendo (como pruebas estadísticas, gráficos, herramientas de medición, etc.). Los investigadores y los científicos de datos suelen preferir este tipo de actividad (siempre me pregunto qué significa eso, pero utilizo este término para su definición general). Tienden a depender de instrumentos conocidos y verificados, que pueden usarse para pruebas o argumentos.

La segunda dimensión es la capacidad de extender, cambiar, mejorar o incluso crear herramientas, algoritmos o modelos. Para lograrlo, necesita un lenguaje de programación adecuado. Aproximadamente todos son iguales. Si trabajas para una empresa, dependes mucho de la infraestructura de la empresa, la cultura interna y tus opciones disminuyen significativamente. Además, cuando desea implementar un algoritmo para uso en producción, debe confiar en la implementación. E implementar en otro idioma que no domines no te ayudará mucho.

Tiendo a favorecer para el primer tipo de actividad el ecosistema R. Tiene una gran comunidad, un gran conjunto de herramientas, pruebas de que estas herramientas funcionan como se esperaba. Además, puede considerar Python, Octave (por nombrar algunos), que son candidatos confiables.

Para la segunda tarea, debes pensar antes en lo que realmente quieres. Si desea herramientas listas para la producción robustas, entonces C / C ++, Java, C # son excelentes candidatos. Considero a Python como un segundo ciudadano en esta categoría, junto con Scala y sus amigos. No quiero comenzar una guerra de llamas, es solo mi opinión. Pero después de más de 17 años como desarrollador, tiendo a preferir un contrato estricto y mi conocimiento, que la libertad de hacer lo que pienses (como sucede con muchos lenguajes dinámicos).

Personalmente, quiero aprender tanto como sea posible. Decidí que tenía que elegir el camino difícil, lo que significa implementar todo desde cero. Yo uso R como modelo e inspiración. Tiene grandes tesoros en bibliotecas y mucha experiencia destilada. Sin embargo, R como lenguaje de programación es una pesadilla para mí. Así que decidí usar Java y no usar una biblioteca adicional. Eso es solo por mi experiencia, y nada más.

Si tiene tiempo, lo mejor que puede hacer es pasar un tiempo con todas estas cosas. De esta forma, obtendrá la mejor respuesta posible, adecuada para usted. Dijkstra dijo una vez que las herramientas influyen en su forma de pensar, por lo que es aconsejable conocer sus herramientas antes de permitirles modelar cómo piensa. Puedes leer más sobre eso en su famoso artículo llamado The Humble Programmer


15

Me gustaría añadir a lo que otros han dicho hasta ahora. No hay una respuesta única de que un idioma es mejor que otro.

Dicho esto, R tiene una mejor comunidad para la exploración y el aprendizaje de datos. Tiene amplias capacidades de visualización. Python, por otro lado, ha mejorado en el manejo de datos desde la introducción de los pandas. El tiempo de aprendizaje y desarrollo es muy menor en Python, en comparación con R (R es un lenguaje de bajo nivel).

Creo que en última instancia se reduce al ecosistema en el que se encuentra y a las preferencias personales. Para más detalles, puede ver esta comparación aquí .


2
"R tiene una mejor comunidad para el aprendizaje" [...] - Creo que esto depende mucho del tipo de aprendizaje. ¿Cuánto está pasando con las redes neuronales (arquitecturas arbitrarias de alimentación, CNNs, RNNs) en R?
Martin Thoma

1
R no es realmente esa OMI de "bajo nivel". También es un lenguaje dinámico.
xji

12

No hay un lenguaje de bala de plata que pueda usarse para resolver todos y cada uno de los problemas relacionados con los datos. La elección del idioma depende del contexto del problema, el tamaño de los datos y si está trabajando en un lugar de trabajo, debe atenerse a lo que usan.

Personalmente, uso R con más frecuencia que Python debido a sus bibliotecas de visualización y su estilo interactivo. Pero si necesito más rendimiento o código estructurado, definitivamente uso Python ya que tiene algunas de las mejores bibliotecas como SciKit-Learn, numpy, scipy, etc. Utilizo R y Python en mis proyectos de manera intercambiable.

Entonces, si está comenzando con el trabajo de ciencia de datos, le sugiero que aprenda ambos y no es difícil ya que Python también proporciona una interfaz similar a R con Pandas .

Si tiene que lidiar con conjuntos de datos mucho más grandes, no puede escapar de los ecosistemas construidos con Java (Hadoop, Pig, Hbase, etc.).


8

No hay un lenguaje "mejor". He probado los dos y estoy cómodo con Python, así que trabajo solo con Python. Aunque todavía estoy aprendiendo cosas, pero hasta ahora no he encontrado ningún obstáculo con Python. Lo bueno de Python es que la comunidad es demasiado buena y puedes obtener mucha ayuda en Internet fácilmente. Aparte de eso, yo diría que vaya con el idioma que le gusta, no el que la gente recomienda.


8

En mi experiencia, la respuesta depende del proyecto en cuestión. Para la investigación pura, prefiero R por dos razones: 1) amplia variedad de bibliotecas y 2) gran parte de la literatura de ciencia de datos incluye muestras de R.

Si el proyecto requiere que los laicos usen una interfaz interactiva, he encontrado que R es demasiado limitado. Shiny es un gran comienzo, pero aún no es lo suficientemente flexible. En estos casos, comenzaré a considerar portar mi trabajo R a Python o js.


8

Un problema que todas las otras respuestas no abordan es la licencia .

La mayoría de las bibliotecas R maravillosos antes mencionados son GPL (por ejemplo ggplot2 , data.table ). Esto le impide distribuir su software de forma patentada.

Aunque muchos usos de esas bibliotecas no implican la distribución del software (por ejemplo, para entrenar modelos fuera de línea), la GPL por sí sola puede atraer a las empresas para que no los usen. Al menos en mi experiencia.

En el reino de Python, por otro lado, la mayoría de las bibliotecas tienen licencias de distribución amigables para las empresas, como BSD o MIT.

En la academia, los problemas de licencia normalmente no son problemas.



6

Uno de los desafíos reales, me enfrenté con R es diferentes paquetes compatibles con diferentes versiones ... muchos paquetes R no están disponibles para la última versión de R ... Y R muchas veces da error debido a que la biblioteca o el paquete se escribió para versiones anteriores versión..


3
No estoy seguro de que este sea un problema particular con R, o que responda a la pregunta de cómo Python y R difieren.
Sean Owen

5

No he probado R (bueno, un poco, pero no lo suficiente como para hacer una buena comparación). Sin embargo, estas son algunas de las fortalezas de Pythons:

  • Sintaxis muy intuitiva : tupla desembalaje, element in a_list, for element in sequence, matrix_a * matrix_b(para la multiplicación de matrices), ...
  • Muchas bibliotecas :
    • scipy : cálculos científicos; muchas partes son solo envoltorios para un código Fortran bastante rápido
    • theano > Lasagne > nolearn : Bibliotecas para redes neuronales: se pueden entrenar en GPU (nvidia, se requiere CUDA) sin ningún ajuste
    • sklearn : algoritmos generales de aprendizaje
  • Buena comunidad :
  • Portátiles IPython
  • Misceláneo :
    • Matrices indexadas 0 ... cometí ese error todo el tiempo con R.
    • Estructuras de paquetes establecidas
    • Buen soporte para probar tu código

3

Prefiero Python sobre R porque Python es un lenguaje de programación completo, por lo que puedo realizar tareas de aprendizaje automático de extremo a extremo, como recopilar datos utilizando un servidor HTTP escrito en Python, realizar tareas avanzadas de ML y luego publicar los resultados en línea. Todo esto se puede hacer en Python. En realidad, encontré que R es más difícil de aprender y los beneficios para aprender Python son mucho mayores porque se puede usar para casi cualquier tarea de programación.


2
Puedes hacer todas esas 3 cosas muy fácilmente en R
Gaius el

2

R: R es la contraparte de código abierto. que tradicionalmente se ha utilizado en la academia y la investigación. Debido a su naturaleza de código abierto, las últimas técnicas se lanzan rápidamente. Hay mucha documentación disponible en Internet y es una opción muy rentable. Python: con el origen como un lenguaje de script de código abierto, el uso de Python ha crecido con el tiempo. Hoy en día, tiene bibliotecas deportivas (numpy, scipy y matplotlib) y funciones para casi cualquier operación estadística / construcción de modelos que desee realizar. Desde la introducción de los pandas, se ha vuelto muy fuerte en las operaciones sobre datos estructurados.

Código de Python

Biblioteca de importación

Importa otras bibliotecas necesarias como pandas, numpy ...

de sklearn import linear_model

Conjuntos de datos de tren de carga y prueba

Las características y los valores de identificación y respuesta deben ser matrices numéricas y numpy

x_train = input_variables_values_training_datasets y_train = target_variables_values_training_datasets x_test = input_variables_values_test_datasets

Crear objeto de regresión lineal

linear = linear_model.LinearRegression ()

Entrene al modelo usando los conjuntos de entrenamiento y verifique el puntaje

linear.fit (x_train, y_train) linear.score (x_train, y_train)

Coeficiente de ecuación e intersección

print ('Coeficiente: \ n', linear.coef_) print ('Intercepción: \ n', linear.intercept_)

Predecir salida

predicted = linear.predict (x_test) Código R

Conjuntos de datos de tren de carga y prueba

Las características y los valores de identificación y respuesta deben ser matrices numéricas y numpy

x_train <- input_variables_values_training_datasets y_train <- target_variables_values_training_datasets x_test <- input_variables_values_test_datasets x <- cbind (x_train, y_train)

Entrene al modelo usando los conjuntos de entrenamiento y verifique el puntaje

lineal <- lm (y_train ~., data = x) resumen (lineal)

Predecir salida

predicho = predecir (lineal, x_test)



0

ingrese la descripción de la imagen aquí

Tengo esta imagen en una publicación de linkedin. Cada vez que tengo dudas sobre el uso de Python o R, lo busco y resulta muy útil.


entonces que eliges?
Serhii Polishchuk