Python vs R für maschinelles Lernen


101

Ich fange gerade an, eine Anwendung für maschinelles Lernen für akademische Zwecke zu entwickeln. Ich benutze gerade R und trainiere mich darin. An vielen Orten habe ich jedoch Leute gesehen, die Python verwendet haben .

Was nutzen die Menschen in Wissenschaft und Industrie und wie lautet die Empfehlung?


3
Nun, welche Art von maschinellem Lernen (Bild / Video? NLP? Finanzielle? Astronomie?), Welche Klassifikatoren, welche Datenmengen (Mb? Gb? Tb?), Welche Skalierung, welche Latenz, auf welcher Plattform (mobil / Einzelcomputer) / multicore / cluster / cloud) ...? Welche spezifischen Bibliotheken werden von Ihrer Anwendung verwendet / benötigt, und haben Sie überprüft, welche in jeder Sprache verfügbar sind? Erstellen Sie nur eine Spielzeuganwendung für Ihr persönliches Lernen, oder spielt es eine Rolle, ob sie jemals produziert wird? Verwenden Sie Open Source oder proprietär? Arbeiten Sie mit anderen Personen oder vorhandenen Apps zusammen und was verwenden / unterstützen diese Personen? Webfrontend / GUI? etc
smci

1
Eine Beobachtung ist, dass Python eher von maschinell lernenden Personen verwendet wird, die mit großen Datenmengen arbeiten, während R eher von traditionellen "Statistikern" verwendet wird, z. B. von Personen, die mit Psychologieexperimenten mit Hunderten von Datenpunkten arbeiten. Dieser Unterschied könnte sich jedoch verringern.
Xji

Python den ganzen Weg Mann! Ich mache viermal so viel wie meine Kollegen an einem Tag. Und Sie können Python für alle Arten von Programmieraufgaben verwenden, nicht nur für maschinelles Lernen.
Francesco Pegoraro

Antworten:


91

Einige wirklich wichtige Unterschiede, die Sie berücksichtigen sollten, wenn Sie R oder Python übereinander wählen :

  • Maschinelles Lernen besteht aus 2 Phasen. Modellbildung und Vorhersagephase. In der Regel wird die Modellbildung als Batch-Prozess ausgeführt und Vorhersagen werden in Echtzeit erstellt . Der Modellbildungsprozess ist ein rechenintensiver Prozess, während die Vorhersage im Handumdrehen erfolgt. Daher wirkt sich die Leistung eines Algorithmus in Python oder R nicht wirklich auf die Bearbeitungszeit des Benutzers aus. Python 1, R 1.
  • Produktion: Der wahre Unterschied zwischen Python und R liegt in der Produktionsreife. Python als solche ist eine vollwertige Programmiersprache und wird von vielen Unternehmen in ihren Produktionssystemen verwendet. R ist eine Software für die statistische Programmierung, die von vielen Wissenschaftlern bevorzugt wird. Aufgrund der zunehmenden Datenwissenschaft und Verfügbarkeit von Bibliotheken und der Tatsache, dass sie Open Source ist, hat die Industrie begonnen, R zu verwenden. Viele dieser Organisationen haben ihre Produktionssysteme entweder in Java, C ++, C #, Python usw. Idealerweise möchten sie das Vorhersagesystem in derselben Sprache haben, um die Latenz- und Wartungsprobleme zu verringern. Python 2, R 1.
  • Bibliotheken: Beide Sprachen haben enorme und zuverlässige Bibliotheken. R hat über 5000 Bibliotheken, die für viele Domains verfügbar sind , während Python einige unglaubliche Pakete wie Pandas, NumPy, SciPy, Scikit Learn und Matplotlib enthält . Python 3, R 2.
  • Entwicklung: Beide Sprachen sind interpretierte Sprachen. Viele sagen, dass Python leicht zu erlernen ist, es ist fast so, als würde man Englisch lesen (um es auf eine leichtere Note zu bringen), aber R erfordert mehr anfängliche Lernanstrengungen. Außerdem haben beide gute IDEs (Spyder usw. für Python und RStudio für R). Python 4, R 2.
  • Die Speed: R-Software hatte anfangs Probleme mit großen Berechnungen (z. B. mit nxn-Matrixmultiplikationen). Dieses Problem wird jedoch mit der Einführung von R durch Revolution Analytics behoben. Sie haben rechenintensive Operationen in C umgeschrieben, was unglaublich schnell ist. Python als Hochsprache ist relativ langsam. Python 4, R 3.
  • Visualisierungen: In der Datenwissenschaft tendieren wir häufig dazu, Daten zu zeichnen, um den Benutzern Muster zu präsentieren. Daher werden Visualisierungen zu einem wichtigen Kriterium bei der Auswahl einer Software, und R macht Python in dieser Hinsicht völlig fertig. Vielen Dank an Hadley Wickham für ein unglaubliches ggplot2-Paket. R gewinnt zweifellos. Python 4, R 4.
  • Umgang mit Big Data: Eine der Einschränkungen von R ist das Speichern der Daten im Systemspeicher (RAM). Daher wird die RAM-Kapazität zu einer Einschränkung, wenn Sie mit Big Data arbeiten. Python funktioniert gut, aber ich würde sagen, da sowohl R als auch Python HDFS-Konnektoren haben, würde die Nutzung der Hadoop-Infrastruktur eine erhebliche Leistungsverbesserung bringen. Also, Python 5, R 5.

Beide Sprachen sind also gleich gut. Abhängig von Ihrer Domain und dem Ort, an dem Sie arbeiten, müssen Sie daher die richtige Sprache auswählen. Die Technologiewelt bevorzugt normalerweise die Verwendung einer einzigen Sprache. Geschäftsanwender (Marketinganalysen, Einzelhandelsanalysen) verwenden in der Regel statistische Programmiersprachen wie R, da sie häufig schnelle Prototypen erstellen und Visualisierungen erstellen (dies ist in R schneller als in Python).


15
In der Visualisierung schlägt R kaum Python. Ich denke, es ist eher das Gegenteil. nicht nur , dass Python hat ggplot (die mich selbst nicht verwenden, da es mehr pythonic Optionen sind, wie Seaborn ), kann es sogar mit Paketen wie im Browser interaktive Visualisierung tun Bokeh .
Emre

10
Auch R hat die Fähigkeit, mit Shiny zu interagieren.
Stanekam

13
Bibliothekare - dem stimme ich überhaupt nicht zu. R ist bei weitem das umfangreichste Toolset und liefert darüber hinaus die richtigen Informationen, teils durch Vererbung von S, teils durch eine der größten Gemeinschaften renommierter Experten.
Rapaio

34
"Speed: R-Software hatte anfangs Probleme mit großen Berechnungen (etwa mit nxn-Matrixmultiplikationen). Dieses Problem wird jedoch mit der Einführung von R durch Revolution Analytics behoben. Sie haben rechenintensive Operationen in C neu geschrieben, was blitzschnell ist. Python als Hochsprache ist relativ langsam. " Ich bin kein erfahrener R-Benutzer, aber meines Wissens hat so ziemlich alles mit Implementierungen auf niedriger Ebene in R auch eine ähnliche Implementierung auf niedriger Ebene in numpy / scipy / pandas / scikit-learn / whatever. Python hat auch Numba und Cython. Dieser Punkt sollte ein Unentschieden sein.
Dougal

8
Für den Kommentar "Umgang mit Big Data" möchte ich hinzufügen, dass Python eine der drei Sprachen ist, die von Apache Spark unterstützt werden und die rasante Geschwindigkeiten aufweisen. Ihr Kommentar zu R mit einem C-Back-End ist richtig, aber auch Python, die Scikitlearn-Bibliothek, ist sehr schnell. Ich denke, Ihr Beitrag hat ein gutes Gleichgewicht, aber ich behaupte, dass Geschwindigkeit zumindest ein Unentschieden ist, und Skalierbarkeit (dh Umgang mit Big Data) ist sicherlich für Python.
Jagartner

23

Es gibt nichts Besseres als "Python ist besser" oder "R ist viel besser als x".

Die einzige Tatsache, die ich kenne, ist, dass sich in der Branche viele Leute an Python halten, weil sie das an der Universität gelernt haben. Die Python-Community ist sehr aktiv und hat einige großartige Frameworks für ML, Data Mining usw.

Aber um ehrlich zu sein, wenn Sie einen guten C-Programmierer haben, kann er dasselbe tun wie die Leute in Python oder R, wenn Sie einen guten Java-Programmierer haben, kann er auch (fast) alles in Java tun.

Also bleib bei der Sprache, mit der du dich gut auskennst.


5
Aber was ist mit den Bibliotheken? Es gibt fortgeschrittene R-Pakete (denken Sie an Ranfom Forest oder Caret), die für die Neuimplementierung in einer Allzwecksprache wie C oder Java
Santiago Cepas,

Mahout dh unterstützt Random Forest für Java
Johnny000

1
Ja, vielleicht, aber R bietet nicht die Leistung, die Sie für die Verarbeitung großer Datenmengen benötigen, und die meiste Zeit haben Sie wirklich große Datenmengen im industriellen Einsatz.
Johnny000

1
Ja, ein guter Programmierer kann dasselbe in C tun, ABER ein schlechter Programmierer kann es in Python so schnell tun wie ein erfahrener Programmierer es in C kann.
Pithikos

1
Ich denke nicht, dass das immer wahr ist @Pithikos Angesichts der zugrunde liegenden mathematischen Formeln kann ich sie normalerweise selbst mit VB / T-SQL schneller implementieren, als ich es kann, indem ich die unnötig arkane Syntax für R- oder Python-Bibliotheken durchwatete. Und machen Sie dabei den resultierenden Code weitaus skalierbarer. Ich bin froh, dass diese Bibliotheken existieren, aber sie haben auch Nachteile. In einigen Situationen und bestimmten Projekten ist es besser, sie zu umgehen.
SQLServerSteve

16

Einige zusätzliche Gedanken.

Die Programmiersprache 'an sich' ist nur ein Werkzeug. Alle Sprachen wurden so entwickelt, dass bestimmte Konstrukte einfacher zu erstellen sind als andere. Und die Kenntnis und Beherrschung einer Programmiersprache ist wichtiger und effektiver als die Merkmale dieser Sprache im Vergleich zu anderen.

Soweit ich sehen kann, gibt es zwei Dimensionen dieser Frage. Die erste Dimension ist die Fähigkeit, Konzepte oder Modelle schnell zu erkunden, Beweise zu erstellen und schließlich genügend Werkzeuge zur Hand zu haben, um zu untersuchen, was vor sich geht (wie statistische Tests, Grafiken, Messwerkzeuge usw.). Diese Art von Aktivität wird normalerweise von Forschern und Datenwissenschaftlern bevorzugt (ich frage mich immer, was das bedeutet, aber ich benutze diesen Begriff für seine lose Definition). Sie verlassen sich in der Regel auf bekannte und überprüfte Instrumente, die für Beweise oder Argumente verwendet werden können.

Die zweite Dimension ist die Fähigkeit, Werkzeuge, Algorithmen oder Modelle zu erweitern, zu ändern, zu verbessern oder sogar zu erstellen. Um dies zu erreichen, benötigen Sie eine geeignete Programmiersprache. Sie sind ungefähr alle gleich. Wenn Sie für ein Unternehmen arbeiten, dann hängen Sie in hohem Maße von der Infrastruktur des Unternehmens ab, die interne Kultur und Ihre Entscheidungen nehmen erheblich ab. Wenn Sie einen Algorithmus für die Produktion implementieren möchten, müssen Sie der Implementierung vertrauen. Und die Implementierung in einer anderen Sprache, die Sie nicht beherrschen, hilft Ihnen nicht viel.

Ich neige dazu, für die erste Art von Aktivität das Ökosystem zu bevorzugen. Sie haben eine großartige Community, eine Vielzahl von Tools, die beweisen, dass diese Tools wie erwartet funktionieren. Sie können auch Python, Octave (um nur einige zu nennen) in Betracht ziehen, die zuverlässige Kandidaten sind.

Für die zweite Aufgabe müssen Sie sich vorher überlegen, was Sie wirklich wollen. Wenn Sie robuste produktionsreife Tools benötigen, sind C / C ++, Java und C # die besten Kandidaten. Ich betrachte Python zusammen mit Scala und Freunden als zweiten Bürger in dieser Kategorie. Ich möchte keinen Flammenkrieg beginnen, das ist nur meine Meinung. Aber nach mehr als 17 Jahren als Entwickler ziehe ich einen strengen Vertrag und mein Wissen der Freiheit vor, alles zu tun, was Sie sich vorstellen (wie es bei vielen dynamischen Sprachen der Fall ist).

Persönlich möchte ich so viel wie möglich lernen. Ich entschied, dass ich den harten Weg wählen muss, was bedeutet, alles von Grund auf neu zu implementieren. Ich benutze R als Vorbild und Inspiration. Es hat große Schätze in Bibliotheken und viel Erfahrung gebrannt. Allerdings ist R als Programmiersprache für mich ein Albtraum. Deshalb habe ich mich für Java entschieden und keine zusätzliche Bibliothek verwendet. Das liegt nur an meiner Erfahrung und an nichts anderem.

Wenn Sie Zeit haben, ist das Beste, was Sie tun können, etwas Zeit mit all diesen Dingen zu verbringen. Auf diese Weise verdienen Sie sich die bestmögliche Antwort, die auf Sie zugeschnitten ist. Dijkstra sagte einmal, dass die Werkzeuge die Art und Weise beeinflussen, wie Sie denken. Daher ist es ratsam, Ihre Werkzeuge zu kennen, bevor Sie sie modellieren lassen, wie Sie denken. Mehr darüber können Sie in seiner berühmten Zeitung The Humble Programmer lesen


15

Ich würde hinzufügen, was andere bis jetzt gesagt haben. Es gibt keine eindeutige Antwort darauf, dass eine Sprache besser ist als die andere.

Trotzdem hat R eine bessere Community für die Erforschung und das Lernen von Daten. Es verfügt über umfangreiche Visualisierungsmöglichkeiten. Python hingegen hat sich seit Einführung der Pandas im Umgang mit Daten verbessert. Die Lern- und Entwicklungszeit ist in Python sehr viel kürzer als in R (R ist eine niedrige Sprache).

Ich denke, es kommt letztendlich auf das Ökosystem an, in dem Sie sich befinden, und auf Ihre persönlichen Vorlieben. Weitere Details zu diesem Vergleich finden Sie hier .


2
"R hat eine bessere Community für [...] Lernen" - ich denke, das hängt stark von der Art des Lernens ab. Wie viel passiert mit neuronalen Netzen (beliebige Feed-Forward-Architekturen, CNNs, RNNs) in R?
Martin Thoma

1
R ist nicht wirklich so "low level" IMO. Es ist auch eine dynamische Sprache.
Xji

12

Es gibt keine Standardsprache, mit der jedes datenbezogene Problem gelöst werden kann. Die Wahl der Sprache hängt vom Kontext des Problems und der Datenmenge ab. Wenn Sie an einem Arbeitsplatz arbeiten, müssen Sie sich an das halten, was sie verwenden.

Ich persönlich benutze R aufgrund seiner Visualisierungsbibliotheken und seines interaktiven Stils häufiger als Python. Aber wenn ich mehr Leistung oder strukturierten Code benötige, verwende ich definitiv Python, da es einige der besten Bibliotheken wie SciKit-Learn, Numpy, Scipy usw. enthält. Ich verwende sowohl R als auch Python in meinen Projekten austauschbar.

Wenn Sie also mit der Arbeit in den Datenwissenschaften beginnen, empfehle ich Ihnen, beides zu lernen, und es ist nicht schwierig, da Python auch eine ähnliche Schnittstelle zu R mit Pandas bietet .

Wenn Sie mit viel größeren Datenmengen zu tun haben, können Sie sich mit Java erstellten Ökosystemen (Hadoop, Pig, Hbase usw.) nicht entziehen.


8

Es gibt keine "bessere" Sprache. Ich habe beide ausprobiert und bin mit Python vertraut, daher arbeite ich nur mit Python. Obwohl ich noch etwas lerne, bin ich mit Python bis jetzt noch keiner Straßensperre begegnet. Das Gute an Python ist, dass die Community zu gut ist und Sie im Internet leicht eine Menge Hilfe bekommen können. Ansonsten würde ich sagen, geh mit der Sprache, die du magst, nicht zu der, die die Leute empfehlen.


8

Nach meiner Erfahrung hängt die Antwort vom jeweiligen Projekt ab. Für die reine Forschung bevorzuge ich R aus zwei Gründen: 1) eine große Vielfalt von Bibliotheken und 2) ein Großteil der datentechnischen Literatur enthält R-Samples.

Wenn das Projekt eine interaktive Oberfläche erfordert, die von Laien verwendet werden soll, habe ich festgestellt, dass R zu eingeschränkt ist. Shiny ist ein großartiger Start, aber noch nicht flexibel genug. In diesen Fällen beginne ich damit, meine R-Arbeit nach Python oder js zu portieren.


8

Ein Problem, das bei allen anderen Antworten nicht behoben werden kann, ist die Lizenzierung .

Die meisten der oben genannten wunderbaren R-Bibliotheken sind GPL (zB ggplot2 , data.table ). Dies verhindert, dass Sie Ihre Software in proprietärer Form vertreiben.

Obwohl viele Nutzungen dieser Bibliotheken keine Verbreitung der Software implizieren (z. B. um Modelle offline zu trainieren), kann die GPL Unternehmen von sich aus davon abhalten, sie zu nutzen. Zumindest nach meiner Erfahrung.

Im Python-Bereich hingegen verfügen die meisten Bibliotheken über geschäftsfreundliche Distributionslizenzen wie BSD oder MIT.

In der Wissenschaft sind Lizenzierungsfragen normalerweise keine Fragen.



6

Eine echte Herausforderung, der ich mich mit R gegenübersah, sind verschiedene Pakete, die mit verschiedenen Versionen kompatibel sind. Sehr viele R-Pakete sind für die neueste Version von R nicht verfügbar Ausführung..


3
Ich bin mir nicht sicher, ob dies ein spezielles Problem mit R ist oder ob es die Frage beantwortet, wie sich Python und R unterscheiden.
Sean Owen

5

Ich habe R nicht ausprobiert (naja, ein bisschen, aber nicht genug, um einen guten Vergleich anzustellen). Hier sind jedoch einige der Stärken von Python:

  • Sehr intuitive Syntax : Tupel Auspacken, element in a_list, for element in sequence, matrix_a * matrix_b(für Matrixmultiplikation), ...
  • Viele Bibliotheken :
    • scipy : Wissenschaftliche Berechnungen; Viele Teile davon sind nur Wrapper für ziemlich schnellen Fortran-Code
    • theano > Lasagne > nolearn : Bibliotheken für neuronale Netze - Sie können ohne Anpassungen auf der GPU trainiert werden (nvidia, CUDA ist erforderlich)
    • sklearn : Allgemeine Lernalgorithmen
  • Gute Community :
  • IPython-Notizbücher
  • Sonstiges :
    • 0-indizierte Arrays ... Ich habe diesen Fehler die ganze Zeit mit R gemacht.
    • Etablierte Paketstrukturen
    • Gute Unterstützung beim Testen Ihres Codes

3

Ich bevorzuge Python gegenüber R, da Python eine vollständige Programmiersprache ist, sodass ich maschinelle Lernaufgaben wie das Sammeln von Daten über einen in Python geschriebenen HTTP-Server ausführen, erweiterte ML-Aufgaben ausführen und die Ergebnisse dann online veröffentlichen kann. Dies kann alles in Python erfolgen. Ich fand R tatsächlich schwieriger zu erlernen und die Gewinne für das Erlernen von Python sind viel höher, da es für so ziemlich jede Programmieraufgabe verwendet werden kann.


2
Sie können sehr alle diese 3 Dinge leicht in R
Gaius

2

R: R ist das Open Source-Gegenstück. die traditionell in Wissenschaft und Forschung eingesetzt wurde. Aufgrund seiner Open-Source-Natur werden die neuesten Techniken schnell veröffentlicht. Über das Internet ist eine Vielzahl von Dokumentationen verfügbar, und dies ist eine sehr kostengünstige Option. Python: Mit der Entstehung als Open-Source-Skriptsprache hat die Verwendung von Python im Laufe der Zeit zugenommen. Heutzutage gibt es Sportbibliotheken (Numpy, Scipy und Matplotlib) und Funktionen für nahezu jede statistische Operation / Modellbildung, die Sie möglicherweise durchführen möchten. Seit der Einführung von Pandas hat es sich bei Operationen mit strukturierten Daten als sehr stark erwiesen.

Python-Code

Bibliothek importieren

Importieren Sie andere notwendige Bibliotheken wie Pandas, Numpy ...

von sklearn import linear_model

Laden von Zug- und Testdatensätzen

Identifizieren Sie Feature und Antwortvariable (n) und Werte müssen numerische und numpy Arrays sein

x_train = Eingabevariablen_Werte_Trainings_Datensätze y_train = Zielvariablen_Werte_Trainings_Datensätze x_test = Eingabevariablen_Werte_Test_Datensätze

Erstellen Sie ein lineares Regressionsobjekt

linear = linear_model.LinearRegression ()

Trainiere das Modell mit den Trainingssets und überprüfe die Punktzahl

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

Gleichungskoeffizient und Achsenabschnitt

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

Ausgabe vorhersagen

predicted = linear.predict (x_test) R Code

Laden von Zug- und Testdatensätzen

Identifizieren Sie Feature und Antwortvariable (n) und Werte müssen numerische und numpy Arrays sein

x_train <- Eingabevariablen_Werte_Training_Datensätze y_train <- Zielvariablen_Werte_Training_Datensätze x_test <- Eingabevariablen_Werte_Test_Datensätze x <- cbind (x_train, y_train)

Trainiere das Modell mit den Trainingssets und überprüfe die Punktzahl

linear <- lm (y_train ~., data = x) Zusammenfassung (linear)

Ausgabe vorhersagen

vorhergesagt = vorhergesagt (linear, x_test)



0

Bildbeschreibung hier eingeben

Ich habe dieses Bild in einem LinkedIn-Post bekommen. Wann immer ich Zweifel habe, Python oder R zu verwenden, schaue ich hinein und es erweist sich als sehr nützlich.


Also, was wählst du?
Serhii Polishchuk
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.