Python vs R pour l'apprentissage automatique

101

Je commence tout juste à développer une application d' apprentissage automatique à des fins académiques. J'utilise actuellement R et m'entraîne moi-même. Cependant, dans de nombreux endroits, j'ai vu des personnes utiliser Python .

Qu'est-ce que les gens utilisent dans les universités et l'industrie et quelle est la recommandation?

Peter Mortensen
la source
3
Bien, quel type de machine learning (image / vidéo? PNL? Financier? Astronomie?), Quels classificateurs, quels jeux de données de taille (Mo? Go? Tb?), Quelle échelle, quelle latence, sur quelle plate-forme (mobile / mono-ordinateur / multicore / cluster / cloud) ...? Quelles bibliothèques spécifiques votre application utilisera-t-elle / aura-t-elle, et avez-vous vérifié ce qui est disponible dans chaque langue? Êtes-vous en train de construire une application de jouet pour votre apprentissage personnel ou est-ce important si elle devient un jour produite? En utilisant open-source ou propriétaire? Travaillerez-vous avec d'autres personnes ou avec des applications existantes, et qu'utilisent-ils / supportent-ils? Interface Web / interface graphique? etc
smci
1
Une observation est que Python est davantage utilisé par les apprenants qui travaillent avec de grands ensembles de données alors que R est davantage utilisé par les "statisticiens" traditionnels, par exemple ceux qui travaillent avec des expériences de psychologie avec des centaines de points de données. Bien que cette différence puisse diminuer.
xji
python tout le chemin mec! Je fais 4 fois ce que mes collègues font en une journée. Et vous pouvez utiliser python pour tout type de tâches de programmation, pas seulement pour l'apprentissage automatique.
Francesco Pegoraro

Réponses:

91

Certaines différences importantes à prendre en compte lorsque vous choisissez R ou Python plutôt que l'autre:

  • L'apprentissage automatique a 2 phases. Phase de construction et de prévision du modèle. Généralement, la création de modèle est effectuée en tant que processus par lots et les prévisions sont effectuées en temps réel . Le processus de création de modèle est un processus intensif de calcul, tandis que la prédiction se produit en un tournemain. Par conséquent, les performances d'un algorithme en Python ou en R n'affectent pas vraiment le délai d'exécution de l'utilisateur. Python 1, R 1.
  • Production: La vraie différence entre Python et R réside dans le fait qu’il est prêt pour la production. Python, en tant que tel, est un langage de programmation à part entière et de nombreuses organisations l’utilisent dans leurs systèmes de production. R est un logiciel de programmation statistique prisé par de nombreuses universités et, en raison de la montée en puissance de la science des données, de la disponibilité des bibliothèques et de son code source ouvert, l'industrie a commencé à utiliser R. Nombre de ces organisations ont leur système de production en Java, C ++, C #. Python, etc. Idéalement, ils souhaiteraient que le système de prédiction soit dans le même langage afin de réduire les problèmes de latence et de maintenance. Python 2, R 1.
  • Bibliothèques: les deux langues ont des bibliothèques énormes et fiables. R possède plus de 5000 bibliothèques couvrant de nombreux domaines, tandis que Python propose d’incroyables packages tels que Pandas, NumPy, SciPy, Scikit Learn et Matplotlib . Python 3, R 2.
  • Développement: les deux langues sont des langues interprétées. Beaucoup disent que le python est facile à apprendre, c'est presque comme lire l'anglais (pour le mettre sur une note plus légère), mais R nécessite davantage d'efforts d'étude initiaux. En outre, ils ont tous deux de bons IDE (Spyder, etc. pour Python et RStudio pour R). Python 4, R2.
  • Vitesse: le logiciel R avait initialement des problèmes avec les calculs volumineux (par exemple, comme les multiplications matricielles nxn). Mais, cette question est traitée avec l'introduction de R par Revolution Analytics. Ils ont réécrit des opérations intensives de calcul en C, qui sont extrêmement rapides. Python étant un langage de haut niveau est relativement lent. Python 4, R 3.
  • Visualisations: dans la science des données, nous avons souvent tendance à tracer des données pour présenter des modèles aux utilisateurs. Par conséquent, les visualisations deviennent un critère important dans le choix d’un logiciel et R tue complètement Python à cet égard. Merci à Hadley Wickham pour son incroyable package ggplot2. R gagne haut la main. Python 4, R 4.
  • Traitement des données volumineuses: L’une des contraintes de R est qu’il stocke les données dans la mémoire système (RAM). La capacité de la mémoire vive devient donc une contrainte lorsque vous manipulez le Big Data. Python se débrouille bien, mais je dirais que R et Python disposant tous deux de connecteurs HDFS, le fait de tirer parti de l’infrastructure Hadoop permettrait d’améliorer considérablement les performances. Donc, Python 5, R 5.

Donc, les deux langues sont également bonnes. Par conséquent, en fonction de votre domaine et de l'endroit où vous travaillez, vous devez choisir judicieusement la bonne langue. Le monde de la technologie préfère généralement utiliser une seule langue. Les utilisateurs professionnels (analyse marketing, analyse de la vente au détail) utilisent généralement des langages de programmation statistiques tels que R, car ils effectuent fréquemment des prototypes rapides et créent des visualisations (ce qui est plus rapide en R que Python).

binga
la source
15
R bat à peine le python en visualisation. Je pense que c'est plutôt l'inverse. non seulement python a ggplot (que je n'utilise pas moi-même, car il y a plus d'options pythoniques, comme seaborn ), il peut même faire de la visualisation interactive dans le navigateur avec des paquets comme bokeh .
Emre
10
Aussi, R a la capacité d'interagir interactivement avec Shiny.
Stanekam
13
Les bibliothécaires - Je ne suis pas du tout d'accord avec cela. R est de loin le jeu d’outils le plus riche et fournit bien plus d’informations, en partie en héritant de S, en partie par l’une des plus grandes communautés d’experts réputés.
rapaio
34
"Le logiciel Speed: R avait initialement des problèmes avec les calculs volumineux (disons, comme les multiplications matricielles nxn). Mais cette question est résolue avec l'introduction de R par Revolution Analytics. Ils ont réécrit les opérations de calcul intensif en C qui est extrêmement rapide. Python étant un langage de haut niveau, il est relativement lent. " Je ne suis pas un utilisateur expérimenté de R, mais dans la mesure où je sais à peu près tout, les implémentations de bas niveau dans R ont également une implémentation de bas niveau similaire dans numpy / scipy / pandas / scikit-learn / peu importe. Python a également numba et cython. Ce point devrait être une cravate.
Dougal le
8
Pour votre commentaire "Traitement des Big Data", j’ajouterais que le python est l’un des 3 langages supportés par apache spark, qui possède des vitesses fulgurantes. Votre commentaire sur le fait que R ait un back-end est vrai, mais python la bibliothèque scikitlearn est également très rapide. Je pense que votre message a un bon équilibre, mais je soutiens que la vitesse est au moins une égalité, et que l’évolutivité (c’est-à-dire le traitement des données volumineuses) est certainement en faveur du python.
Jagartner
23

Il n'y a rien comme "python est meilleur" ou "R est beaucoup mieux que x".

Le seul fait que je sache, c’est que dans l’industrie, beaucoup de gens s’en tiennent au python, car c’est ce qu’ils ont appris à l’université. La communauté python est très active et dispose de quelques excellents frameworks pour ML, l’exploration de données, etc.

Mais pour être honnête, si vous avez un bon programmeur c, il peut faire la même chose que les gens en python ou r, si vous avez un bon programmeur java, il peut également tout faire (ou presque) en java.

Alors, tenez-vous-en à la langue avec laquelle vous êtes à l'aise.

Johnny000
la source
5
Mais qu'en est-il des bibliothèques? Il existe des packages R avancés (pensez Ranfom Forest ou Caret) qui seraient tout à fait irréalistes à réimplémenter dans un langage généraliste tel que C ou Java
Santiago Cepas
mahout c'est-à-dire supporte les forets aléatoires pour java
Johnny000
1
Ouais peut-être, mais R n'apporte pas la performance du tout dont vous avez besoin pour traiter de gros ensembles de données et la plupart du temps, vous avez de très grands ensembles de données à usage industriel.
Johnny000
1
Oui, un bon programmeur peut faire la même chose en C. MAIS UN mauvais programmeur peut le faire en Python aussi vite qu'un programmeur expérimenté peut le faire en C.
Pithikos
1
Je ne pense pas que cela soit toujours vrai @Pithikos Compte tenu des formules mathématiques sous-jacentes, je peux généralement les implémenter plus rapidement moi-même avec VB / T-SQL plus rapidement que je ne le pourrais en parcourant la syntaxe inutilement arcanique des bibliothèques R ou Python. Et dans le processus, rendre le code résultant beaucoup plus évolutif. Je suis heureux que ces bibliothèques existent, mais qu'elles comportent des inconvénients. Dans certaines situations et certains projets, il vaut mieux les éviter.
SQLServerSteve
16

Quelques pensées supplémentaires.

Le langage de programmation «en soi» n’est qu’un outil. Toutes les langues ont été conçues pour rendre certains types de constructions plus faciles à construire que d’autres. Et la connaissance et la maîtrise d'un langage de programmation sont plus importantes et efficaces que les fonctionnalités de ce langage par rapport aux autres.

Autant que je sache, cette question a deux dimensions. La première dimension est la capacité d'explorer, d'établir rapidement des preuves de concepts ou de modèles, en disposant éventuellement de suffisamment d'outils pour étudier ce qui se passe (tests statistiques, graphiques, outils de mesure, etc.). Ce type d’activité est généralement préféré par les chercheurs et les spécialistes de l’informatique (je me demande toujours ce que cela signifie, mais j’utilise ce terme pour en donner une définition approximative). Ils ont tendance à s'appuyer sur des instruments bien connus et vérifiés, pouvant servir de preuves ou d'arguments.

La deuxième dimension est la capacité à étendre, modifier, améliorer ou même créer des outils, des algorithmes ou des modèles. Pour ce faire, vous avez besoin d’un langage de programmation approprié. À peu près tous sont les mêmes. Si vous travaillez pour une entreprise et que vous dépendez beaucoup de son infrastructure, la culture interne et vos choix diminuent considérablement. En outre, lorsque vous souhaitez implémenter un algorithme pour une utilisation en production, vous devez faire confiance à la mise en œuvre. Et mettre en œuvre dans une autre langue que vous ne maîtrisez pas ne vous aidera pas beaucoup.

J'ai tendance à privilégier, pour le premier type d'activité, l'écosystème R. Vous avez une grande communauté, un vaste ensemble d’outils, la preuve que ces outils fonctionnent comme prévu. En outre, vous pouvez envisager Python, Octave (pour n'en nommer que quelques-uns), qui sont des candidats fiables.

Pour la deuxième tâche, vous devez penser avant à ce que vous voulez vraiment. Si vous voulez des outils robustes prêts pour la production, alors C / C ++, Java et C # sont d'excellents candidats. Je considère Python comme un second citoyen de cette catégorie, avec Scala et ses amis. Je ne veux pas commencer une guerre de flammes, c'est mon avis seulement. Mais après plus de 17 ans en tant que développeur, j'ai tendance à préférer un contrat strict et mes connaissances à la liberté de faire ce que vous voulez (comme cela se produit avec beaucoup de langages dynamiques).

Personnellement, je veux apprendre le plus possible. J'ai décidé que je devais choisir la méthode la plus difficile, ce qui signifie tout mettre en œuvre moi-même. J'utilise R comme modèle et inspiration. Il a de grands trésors dans les bibliothèques et beaucoup d’expérience distillée. Cependant, R en tant que langage de programmation est un cauchemar pour moi. J'ai donc décidé d'utiliser Java et de ne pas utiliser de bibliothèque supplémentaire. C'est uniquement à cause de mon expérience et rien d'autre.

Si vous avez le temps, la meilleure chose à faire est de passer du temps avec toutes ces choses. De cette façon, vous gagnerez la meilleure réponse possible, adaptée pour vous. Dijkstra a déjà déclaré que les outils influaient sur votre façon de penser. Il est donc conseillé de connaître vos outils avant de les laisser modéliser votre façon de penser. Vous pouvez en savoir plus à ce sujet dans son célèbre article intitulé The Humble Programmer.

rapaio
la source
15

J'ajouterais à ce que d'autres ont dit jusqu'à présent. Il n'y a pas de réponse unique qu'une langue est meilleure qu'une autre.

Cela dit, R dispose d’une meilleure communauté pour l’exploration et l’apprentissage des données. Il dispose de capacités de visualisation étendues. Python, en revanche, est devenu meilleur en traitement de données depuis l’introduction des pandas. Le temps d’apprentissage et de développement est très inférieur en Python par rapport à R (R étant un langage de bas niveau).

Je pense que cela se résume finalement à l'éco-système dans lequel vous vous trouvez et à vos préférences personnelles. Pour plus de détails, vous pouvez regarder cette comparaison ici .

Kunal
la source
2
"R a une meilleure communauté d'apprentissage [...]" - je suppose que cela dépend fortement du type d'apprentissage. Que se passe-t-il avec les réseaux de neurones (architectures arbitraires à feed-forward, CNN, RNN) en R?
Martin Thoma
1
R n'est pas vraiment ce "bas niveau" OMI. C'est aussi un langage dynamique.
xji
12

Il n’existe pas de solution miracle pour résoudre chaque problème lié aux données. Le choix de la langue dépend du contexte du problème, de la taille des données et si vous travaillez sur un lieu de travail, vous devez vous en tenir à ce qu’ils utilisent.

Personnellement, j'utilise R plus souvent que Python en raison de ses bibliothèques de visualisation et de son style interactif. Mais si j'ai besoin de plus de performances ou de code structuré, j'utilise certainement Python car il possède certaines des meilleures bibliothèques telles que SciKit-Learn, numpy, scipy, etc. J'utilise indifféremment R et Python dans mes projets.

Donc, si vous commencez à travailler sur la science des données, je vous suggère d'apprendre les deux et ce n'est pas difficile, car Python fournit également une interface similaire à R avec Pandas .

Si vous devez gérer des jeux de données beaucoup plus volumineux, vous ne pouvez pas échapper aux écosystèmes construits avec Java (Hadoop, Pig, Hbase, etc.).

Kaushalya
la source
8

Il n'y a pas de "meilleur" langage. J'ai essayé les deux et je suis à l'aise avec Python, donc je ne travaille qu'avec Python. Bien que j'apprenne toujours des choses, mais je n'ai rencontré aucun obstacle avec Python jusqu'à présent. La bonne chose à propos de Python est que la communauté est trop bonne et que vous pouvez facilement obtenir beaucoup d’aide sur Internet. Autre que cela, je dirais aller avec la langue que vous aimez pas celle que les gens recommandent.

Pensu
la source
8

D'après mon expérience, la réponse dépend du projet en cours. Pour la recherche pure, je préfère R pour deux raisons: 1) une grande variété de bibliothèques et 2) une grande partie de la littérature sur la science des données comprend des échantillons R.

Si le projet nécessite l'utilisation d'une interface interactive par les non-initiés, j'ai trouvé que R était trop contraint. Shiny est un bon début, mais ce n'est pas encore assez flexible. Dans ces cas-là, je commencerai par examiner le portage de mon travail R vers Python ou js.

Anglais
la source
8

Un problème que toutes les autres réponses ne parviennent pas à résoudre est la licence .

La plupart des merveilleuses bibliothèques R mentionnées ci-dessus sont GPL (par exemple, ggplot2 , data.table ). Cela vous empêche de distribuer votre logiciel sous une forme propriétaire.

Bien que de nombreuses utilisations de ces bibliothèques n'impliquent pas la distribution du logiciel (par exemple, pour former des modèles hors ligne), la GPL peut à elle seule empêcher les entreprises de les utiliser. Tout du moins selon moi.

En revanche, dans le domaine python, la plupart des bibliothèques disposent de licences de distribution adaptées aux entreprises, telles que BSD ou MIT.

Dans le monde universitaire, les problèmes de licence ne sont normalement pas des problèmes.

vitesse
la source
6

L’un des vrais défis, j’ai fait face à R, ce sont différents packages compatibles avec différentes versions. Un grand nombre de packages R ne sont pas disponibles pour la dernière version de R .. Et plusieurs fois R donne une erreur en raison d’une bibliothèque ou un package a été écrit pour version..

RAM
la source
3
Je ne suis pas sûr que ce soit un problème particulier avec R, ou que cela réponde à la question de savoir en quoi Python et R diffèrent.
Sean Owen
5

Je n'ai pas essayé R (bon, un peu, mais pas assez pour faire une bonne comparaison). Cependant, voici quelques points forts de Pythons:

  • Syntaxe très intuitive : déballage tuple, element in a_list, for element in sequence, matrix_a * matrix_b(pour la multiplication de la matrice), ...
  • Beaucoup de bibliothèques :
    • scipy : calculs scientifiques; de nombreuses parties ne sont que des wrappers pour du code Fortran assez rapide
    • Théano > Lasagne > nolearn : Bibliothèques pour les réseaux de neurones - ils peuvent être formés sur GPU (nvidia, CUDA est nécessaire) sans ajustement
    • sklearn : algorithmes d'apprentissage généraux
  • Bonne communauté :
  • Cahiers IPython
  • Misc :
    • Tableaux 0-indexés ... J'ai fait cette erreur tout le temps avec R.
    • Structures de colis établies
    • Bon support pour tester votre code
Martin Thoma
la source
3

Je préfère Python à R, car Python est un langage de programmation complet, ce qui me permet de réaliser des tâches d'apprentissage automatique telles que la collecte de données à l'aide d'un serveur HTTP écrit en Python, d'effectuer des tâches de ML avancées, puis de publier les résultats en ligne. Tout cela peut être fait en Python. En fait, j'ai trouvé que R était plus difficile à apprendre et les avantages de l'apprentissage de Python sont bien meilleurs car il peut être utilisé pour pratiquement toutes les tâches de programmation.

Dave Julian
la source
2
Vous pouvez faire ces 3 choses très facilement dans R
Gaius
2

R: R est le pendant open source. qui a été traditionnellement utilisé dans les universités et la recherche. En raison de leur nature open source, les dernières techniques sont publiées rapidement. Il existe une grande quantité de documentation disponible sur Internet et c'est une option très rentable. Python: Avec son origine comme langage de script open source, l'utilisation de Python a augmenté avec le temps. Aujourd'hui, il est doté de bibliothèques (numpy, scipy et matplotlib) et fonctionne pour presque toutes les opérations statistiques / création de modèles que vous souhaitez effectuer. Depuis l’introduction des pandas, il est devenu très fort dans les opérations sur données structurées.

Code python

Bibliothèque d'importation

Importer d'autres librairies indispensables comme pandas, numpy ...

à partir de sklearn import linear_model

Charger le train et tester des jeux de données

Identifiez les variables de caractéristique et de réponse et les valeurs doivent être des tableaux numériques et numpy

x_train = input_variables_values_training_datasets y_train = target_variables_values_training_datasets x_test = input_variables_values_test_datasets

Créer un objet de régression linéaire

linear = modèle_linéaire.RégressionLinéaire ()

Entraînez le modèle à l'aide des ensembles d'entraînement et vérifiez le score

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

Coefficient d'équation et d'interception

print ('Coefficient: \ n', linear.coef_) print ('Intercept: \ n', linear.intercept_)

Prédire la sortie

prédit = linear.predict (x_test) R Code

Charger le train et tester des jeux de données

Identifiez les variables de caractéristique et de réponse et les valeurs doivent être des tableaux numériques et 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)

Entraînez le modèle à l'aide des ensembles d'entraînement et vérifiez le score

linear <- lm (y_train ~., data = x) résumé (linéaire)

Prédire la sortie

prédite = prédire (linéaire, x_test)

dileep balineni
la source
0

entrez la description de l'image ici

J'ai eu cette image dans un post linkedin. Chaque fois que j'ai un doute sur l'utilisation de python ou de R, je le vérifie et cela s'avère très utile.

Arun
la source
Alors, que choisis-tu?
Serhii Polishchuk