Python vs R do uczenia maszynowego

101

Właśnie zaczynam opracowywać aplikację do uczenia maszynowego do celów akademickich. Obecnie używam R i trenuję się w tym. Jednak w wielu miejscach widziałem ludzi używających Pythona .

Z czego korzystają ludzie w środowisku akademickim i przemyśle i jakie jest zalecenie?

Peter Mortensen
źródło
3
Cóż, jaki rodzaj uczenia maszynowego (obraz / wideo? NLP? Finansowy? Astronomia?), Jakie klasyfikatory, jaki zestaw danych wielkości (Mb? Gb? Tb?), Jaką skalę, jakie opóźnienie, na jakiej platformie (mobilny / pojedynczy komputer) / multicore /uster / cloud) ...? Jakie biblioteki będą używane / potrzebne Twojej aplikacji i czy sprawdziłeś, co jest dostępne w każdym języku? Czy budujesz tylko zabawkową aplikację do nauki osobistej, czy ma to znaczenie, czy kiedykolwiek zostanie wyprodukowana? Używasz oprogramowania typu open source lub zastrzeżonego? Czy będziesz współpracować z innymi ludźmi lub istniejącymi aplikacjami i z czego korzystają / wspierają? Interfejs WWW / GUI? itp.
smci,
1
Jedną z obserwacji jest to, że Python jest częściej używany przez osoby uczące się maszynowo pracujące z dużymi zestawami danych, podczas gdy R jest częściej używany przez tradycyjnych „statystyków”, np. Tych pracujących z eksperymentami psychologicznymi z setkami punktów danych. Chociaż różnica ta może się zmniejszać.
Xji
python przez całą drogę! Robię 4 razy więcej niż moi koledzy w ciągu jednego dnia. I możesz używać Pythona do wszelkiego rodzaju zadań programistycznych, nie tylko uczenia maszynowego.
Francesco Pegoraro

Odpowiedzi:

91

Kilka naprawdę ważnych różnic, które należy wziąć pod uwagę, wybierając R lub Python między sobą:

  • Uczenie maszynowe ma 2 fazy. Budowa modelu i faza prognozowania. Zazwyczaj budowanie modelu odbywa się jako proces wsadowy, a prognozy są wykonywane w czasie rzeczywistym . Proces budowania modelu jest procesem intensywnym obliczeniowo, podczas gdy prognozowanie odbywa się w mgnieniu oka. Dlatego wydajność algorytmu w Pythonie lub R tak naprawdę nie wpływa na czas zawracania użytkownika. Python 1, R 1.
  • Produkcja: prawdziwa różnica między Pythonem a R polega na gotowości do produkcji. Python jako taki jest pełnoprawnym językiem programowania i wiele organizacji używa go w swoich systemach produkcyjnych. R to oprogramowanie do programowania statystycznego, preferowane przez wiele środowisk akademickich, a ze względu na rozwój nauki o danych i dostępności bibliotek oraz otwartego oprogramowania, przemysł zaczął używać R. Wiele z tych organizacji ma swoje systemy produkcyjne w Javie, C ++, C #, Python itp. Idealnie chcieliby mieć system predykcji w tym samym języku, aby zmniejszyć opóźnienia i problemy z konserwacją. Python 2, R 1.
  • Biblioteki: oba języki mają ogromne i niezawodne biblioteki. R ma ponad 5000 bibliotek obsługujących wiele domen, podczas gdy Python ma niesamowite pakiety, takie jak Pandas, NumPy, SciPy, Scikit Learn, Matplotlib . Python 3, R 2.
  • Rozwój: oba języki są tłumaczonymi językami. Wielu twierdzi, że Python jest łatwy do nauczenia się, prawie przypomina czytanie po angielsku (aby umieścić go na lżejszej nucie), ale R wymaga większego wysiłku w nauce. Oba mają również dobre IDE (Spyder itp. Dla Pythona i RStudio dla R). Python 4, R2.
  • Oprogramowanie Speed: R początkowo miało problemy z dużymi obliczeniami (powiedzmy, takimi jak mnożenie macierzy nxn). Ale ten problem rozwiązano wraz z wprowadzeniem R przez Revolution Analytics. Mają ponownie napisane intensywne obliczenia operacje w C, który jest niesamowicie szybki. Python jako język wysokiego poziomu jest stosunkowo wolny. Python 4, R 3.
  • Wizualizacje: w nauce o danych często wykreślamy dane, aby zaprezentować wzorce użytkownikom. Dlatego wizualizacje stają się ważnym kryterium przy wyborze oprogramowania, a R całkowicie zabija Pythona pod tym względem. Dzięki Hadley Wickham za niesamowity pakiet ggplot2. R wygrywa rozdanie. Python 4, R 4.
  • Radzenie sobie z Big Data: Jednym z ograniczeń R jest przechowywanie danych w pamięci systemowej (RAM). Tak więc pojemność pamięci RAM staje się ograniczeniem podczas obsługi Big Data. Python ma się dobrze, ale powiedziałbym, ponieważ zarówno R, jak i Python mają złącza HDFS, wykorzystanie infrastruktury Hadoop dałoby znaczną poprawę wydajności. Tak więc Python 5, R 5.

Oba języki są jednakowo dobre. Dlatego w zależności od domeny i miejsca pracy musisz mądrze wybrać odpowiedni język. Świat technologii zwykle woli używać jednego języka. Użytkownicy biznesowi (analityka marketingowa, analityka detaliczna) zazwyczaj korzystają ze statystycznych języków programowania, takich jak R, ponieważ często wykonują szybkie prototypowanie i budują wizualizacje (co jest szybsze w języku R niż Python).

Binga
źródło
15
R prawie nie bije pytona w wizualizacji. Myślę, że jest raczej na odwrót; nie tylko python ma ggplot (którego sam nie używam, ponieważ istnieje więcej opcji pythonowych , takich jak seaborn ), ale może nawet wykonywać interaktywną wizualizację w przeglądarce z pakietami takimi jak bokeh .
Emre
10
Również R ma zdolność interaktywnego mianowania z Shiny.
stanekam
13
Bibliotekarze - wcale się z tym nie zgadzam. R jest zdecydowanie najbogatszym zestawem narzędzi, a ponadto zapewnia informacje we właściwy sposób, częściowo poprzez dziedziczenie S, a częściowo przez jedną z największych społeczności renomowanych ekspertów.
rapaio
34
„Oprogramowanie Speed: R początkowo miało problemy z dużymi obliczeniami (powiedzmy, takimi jak mnożenie macierzy nxn). Ale ten problem rozwiązano wraz z wprowadzeniem R. przez Revolution Analytics. Mają ponownie napisane operacje intensywnie obliczające w C, które jest niesamowicie szybkie. Python jako język wysokiego poziomu jest stosunkowo wolny. ” Nie jestem doświadczonym użytkownikiem R, ale o ile wiem prawie wszystko z implementacjami niskiego poziomu w R ma również podobną implementację niskiego poziomu w numpy / scipy / pandas / scikit-learn / cokolwiek. Python ma również Numba i Cython. Ten punkt powinien być remisowy.
Dougal,
8
W komentarzu „Radzenie sobie z Big Data” dodam, że Python jest jednym z 3 języków obsługiwanych przez iskrę apache, która ma niesamowitą szybkość. Twój komentarz o tym, że R ma zaplecze C jest prawdą, ale podobnie python biblioteka scikitlearn jest również bardzo szybka. Myślę, że twój post ma niezłą równowagę, ale uważam, że prędkość to przynajmniej remis, a skalowalność (tj. Obsługa dużych zbiorów danych) z pewnością sprzyja pythonowi.
jagartner
23

Nie ma to jak „python jest lepszy” lub „R jest znacznie lepszy niż x”.

Jedyny fakt, jaki znam, to to, że w branży przydziały ludzi trzymają się pytona, ponieważ tego nauczyli się na uniwersytecie. Społeczność python jest naprawdę aktywna i ma kilka świetnych struktur do ML i eksploracji danych itp.

Ale szczerze mówiąc, jeśli masz dobrego programistę c, może on robić to samo, co ludzie w Pythonie lub r, jeśli masz dobrego programistę Java, może on także robić (prawie) wszystko w Javie.

Trzymaj się więc języka, w którym czujesz się komfortowo.

Johnny000
źródło
5
Ale co z bibliotekami? Istnieją zaawansowane pakiety R (myślę, że Ranfom Forest lub Caret) byłyby całkowicie niepraktyczne w przypadku reimplementacji w języku ogólnego przeznaczenia, takim jak C lub Java
Santiago Cepas
mahout, tj. obsługuje losowy las dla javy
Johnny000,
1
Tak, może, ale R wcale nie zapewnia wydajności, której potrzebujesz do przetwarzania dużych zestawów danych i przez większość czasu masz naprawdę duże zbiory danych w zastosowaniach przemysłowych.
Johnny000,
1
Tak, dobry programista może zrobić to samo w C. ALE zły programista może to zrobić w Pythonie tak szybko, jak doświadczony programista może to zrobić w C.
Pithikos
1
Nie sądzę, że to zawsze prawda @Pithikos Biorąc pod uwagę podstawowe formuły matematyczne, zwykle mogę je szybciej zaimplementować za pomocą VB / T-SQL szybciej niż potrafię, brodząc przez niepotrzebnie tajemną składnię dla bibliotek R lub Python. Dzięki temu powstały kod jest znacznie bardziej skalowalny. Cieszę się, że biblioteki te istnieją, ale są w nich wbudowane wady; w niektórych sytuacjach i konkretnych projektach lepiej je ominąć.
SQLServerSteve
16

Kilka dodatkowych myśli.

Język programowania „per se” jest tylko narzędziem. Wszystkie języki zostały zaprojektowane tak, aby niektóre typy konstrukcji były łatwiejsze do zbudowania niż inne. A znajomość i opanowanie języka programowania jest ważniejsza i bardziej efektywna niż cechy tego języka w porównaniu do innych.

O ile widzę, istnieją dwa wymiary tego pytania. Pierwszym wymiarem jest zdolność do eksploracji, budowania dowodu koncepcji lub modeli w szybkim tempie, w końcu posiadanie wystarczającej ilości narzędzi do badania tego, co się dzieje (takich jak testy statystyczne, grafika, narzędzia pomiarowe itp.). Ten rodzaj aktywności jest zwykle preferowany przez badaczy i badaczy danych (zawsze zastanawiam się, co to znaczy, ale używam tego terminu do jego luźnej definicji). Zwykle polegają na dobrze znanych i zweryfikowanych instrumentach, które można wykorzystać do przedstawienia dowodów lub argumentów.

Drugi wymiar to możliwość rozszerzenia, zmiany, ulepszenia, a nawet tworzenia narzędzi, algorytmów lub modeli. Aby to osiągnąć, potrzebujesz odpowiedniego języka programowania. Z grubsza wszystkie są takie same. Jeśli pracujesz dla firmy, zależy to w dużej mierze od infrastruktury firmy, kultury wewnętrznej i twoich wyborów znacznie się zmniejsza. Ponadto, jeśli chcesz zaimplementować algorytm do użytku produkcyjnego, musisz zaufać implementacji. A wdrożenie w innym języku, którego nie znasz, nie pomoże ci zbytnio.

Dla pierwszego rodzaju działalności preferuję ekosystem R. Masz świetną społeczność, ogromny zestaw narzędzi, dowody, że narzędzia te działają zgodnie z oczekiwaniami. Można również rozważyć Python, Octave (aby wymienić tylko kilka), którzy są wiarygodnymi kandydatami.

Przy drugim zadaniu musisz wcześniej pomyśleć o tym, czego naprawdę chcesz. Jeśli potrzebujesz solidnych narzędzi gotowych do produkcji, C / C ++, Java, C # są świetnymi kandydatami. Uważam Pythona za drugiego obywatela w tej kategorii, razem ze Scalą i przyjaciółmi. Nie chcę rozpętać wojny z płomieniami, to tylko moja opinia. Ale po ponad 17 latach pracy jako programisty wolę ścisłą umowę i moją wiedzę niż swobodę robienia czegokolwiek, o czym myślisz (na przykład w przypadku wielu dynamicznych języków).

Osobiście chcę się nauczyć jak najwięcej. Zdecydowałem, że muszę wybrać trudny sposób, co oznacza, że ​​wszystko muszę realizować od zera. Używam R jako modelu i inspiracji. Ma wielkie skarby w bibliotekach i wiele destylowanych doświadczeń. Jednak R jako język programowania jest dla mnie koszmarem. Postanowiłem więc korzystać z Javy i nie używać żadnej dodatkowej biblioteki. Wynika to tylko z mojego doświadczenia i nic więcej.

Jeśli masz czas, najlepszą rzeczą, jaką możesz zrobić, to spędzić trochę czasu z tymi wszystkimi rzeczami. W ten sposób zdobędziesz najlepszą możliwą odpowiedź, dopasowaną do Ciebie. Dijkstra powiedział kiedyś, że narzędzia wpływają na twój sposób myślenia, dlatego dobrze jest znać swoje narzędzia, zanim pozwolą im modelować twój sposób myślenia. Możesz przeczytać więcej na ten temat w jego słynnym artykule zatytułowanym The Humble Programmer

rapaio
źródło
15

Dodałbym do tego, co dotychczas powiedzieli inni. Nie ma jednej odpowiedzi, że jeden język jest lepszy od drugiego.

Powiedziawszy to, R ma lepszą społeczność do eksploracji danych i uczenia się. Ma szerokie możliwości wizualizacji. Z drugiej strony Python stał się lepszy w przetwarzaniu danych od czasu wprowadzenia pand. Czas nauki i rozwoju jest znacznie krótszy w Pythonie, w porównaniu do R (R jest językiem niskiego poziomu).

Myślę, że ostatecznie sprowadza się to do ekosystemu, w którym się znajdujesz i osobistych preferencji. Aby uzyskać więcej informacji, możesz obejrzeć to porównanie tutaj .

Kunal
źródło
2
„R ma lepszą społeczność do [...] uczenia się” - Myślę, że to zależy od rodzaju uczenia się. Ile się dzieje z sieciami neuronowymi (dowolne architektury sprzężenia zwrotnego, CNN, RNN) w R?
Martin Thoma,
1
R nie jest tak naprawdę „niskim poziomem” IMO. To także język dynamiczny.
Xji
12

Nie ma srebrnego języka, w którym można rozwiązać każdy problem związany z danymi. Wybór języka zależy od kontekstu problemu, wielkości danych i jeśli pracujesz w miejscu pracy, musisz trzymać się tego, czego używają.

Osobiście używam R częściej niż Python ze względu na biblioteki wizualizacji i interaktywny styl. Ale jeśli potrzebuję większej wydajności lub kodu strukturalnego, zdecydowanie używam Pythona, ponieważ ma on jedne z najlepszych bibliotek takich jak SciKit-Learn, numpy, scipy itp. Używam zarówno R, jak i Pythona w moich projektach zamiennie.

Jeśli więc zaczynasz pracę nad nauką danych, proponuję nauczyć się obu. Nie jest to trudne, ponieważ Python zapewnia również interfejs podobny do R z Pandas .

Jeśli masz do czynienia ze znacznie większymi zestawami danych, nie możesz uciec od ekosystemów zbudowanych w Javie (Hadoop, Pig, Hbase itp.).

Kaushalya
źródło
8

Nie ma „lepszego” języka. Próbowałem obu z nich i czuję się dobrze z Pythonem, więc pracuję tylko z Pythonem. Chociaż wciąż się uczę, ale do tej pory nie spotkałem się z żadną przeszkodą w Pythonie. Zaletą Pythona jest to, że społeczność jest zbyt dobra i łatwo można uzyskać dużą pomoc w Internecie. Poza tym powiedziałbym, że idź w języku, który lubisz, a nie tym, który ludzie polecają.

Pensu
źródło
8

Z mojego doświadczenia wynika, że ​​odpowiedź zależy od danego projektu. Dla czystych badań wolę R z dwóch powodów: 1) szerokiej gamy bibliotek i 2) znacznej części literatury naukowej zawiera próbki R.

Jeśli projekt wymaga interaktywnego interfejsu do użycia przez laików, uważam, że R jest zbyt ograniczony. Błyszczący to świetny początek, ale nie jest jeszcze wystarczająco elastyczny. W takich przypadkach zacznę patrzeć na przeniesienie mojej pracy R do Pythona lub js.

Rglish
źródło
8

Problemem, którego nie udało się rozwiązać w przypadku innych odpowiedzi, jest licencjonowanie .

Większość wyżej wymienionych wspaniałych bibliotek R to GPL (np. Ggplot2 , data.table ). To zapobiega z dystrybucją oprogramowania w zastrzeżonej formie.

Chociaż wiele zastosowań tych bibliotek nie oznacza dystrybucji oprogramowania (np. Do trenowania modeli offline), GPL może sama w sobie zniechęcić firmy do korzystania z nich. Przynajmniej z mojego doświadczenia.

Z drugiej strony w dziedzinie python większość bibliotek ma przyjazne dla biznesu licencje dystrybucyjne, takie jak BSD lub MIT.

W środowisku akademickim kwestie licencyjne zwykle nie są problemami.

ncasas
źródło
6

Jednym z prawdziwych wyzwań, z którym miałem do czynienia w R, są różne pakiety kompatybilne z różnymi wersjami .. całkiem sporo pakietów R nie jest dostępnych dla najnowszej wersji R .. A R całkiem sporo czasu daje błąd ze względu na bibliotekę lub pakiet został napisany dla starszych wersja..

Baran
źródło
3
Nie jestem pewien, czy jest to szczególny problem z R lub czy odpowiada on na pytanie, czym różnią się Python i R.
Sean Owen
5

Nie próbowałem R (cóż, trochę, ale nie wystarczająco, aby zrobić dobre porównanie). Oto jednak niektóre z mocnych stron Pythona:

  • Bardzo intuicyjna składnia : krotka rozpakowywanie, element in a_list, for element in sequence, matrix_a * matrix_b(dla mnożenia macierzy), ...
  • Wiele bibliotek :
    • scipy : obliczenia naukowe; wiele jego części jest tylko opakowaniami dla dość szybkiego kodu Fortran
    • theano > Lasagne > nolearn : Biblioteki dla sieci neuronowych - można je szkolić na GPU (wymagana jest NVIDIA, wymagana jest CUDA) bez żadnych modyfikacji
    • sklearn : Ogólne algorytmy uczenia się
  • Dobra społeczność :
  • Zeszyty IPython
  • Różne :
    • Tablice z indeksowaniem 0 ... Cały czas popełniłem ten błąd za pomocą R.
    • Ustanowione struktury pakietów
    • Dobre wsparcie dla testowania twojego kodu
Martin Thoma
źródło
3

Wolę Python niż R, ponieważ Python jest kompletnym językiem programowania, dzięki czemu mogę wykonywać zadania uczenia maszynowego od końca do końca, takie jak zbieranie danych za pomocą serwera HTTP napisanego w Pythonie, wykonywanie zaawansowanych zadań ML, a następnie publikowanie wyników online. Wszystko to można zrobić w Pythonie. Naprawdę uważam, że R jest trudniejszy do nauczenia, a korzyści z nauki Pythona są znacznie większe, ponieważ można go używać do prawie każdego zadania programistycznego.

Dave Julian
źródło
2
Możesz zrobić wszystkie te 3 rzeczy bardzo łatwo w R
Gaius
2

R: R jest odpowiednikiem Open Source. który tradycyjnie był wykorzystywany w środowisku akademickim i badawczym. Ze względu na charakter open source najnowsze techniki są szybko uwalniane. W Internecie dostępnych jest wiele dokumentacji i jest to bardzo opłacalna opcja. Python: Z początku jako język skryptowy typu open source, użycie Pythona z czasem wzrosło. Dzisiaj, to biblioteki sportowe (numpy, scipy i matplotlib) i funkcje dla prawie każdej operacji statystycznej / budowy modelu, którą możesz chcieć zrobić. Od czasu wprowadzenia pand stała się bardzo silna w operacjach na danych strukturalnych.

Kod Python

Importuj bibliotekę

Importuj inne niezbędne biblioteki, takie jak pandy, numpy ...

z sklearn import linear_model

Ładowanie zestawów danych dotyczących pociągu i testu

Zidentyfikuj zmienne funkcyjne i odpowiedzi oraz wartości muszą być tablicami liczbowymi i liczbowymi

x_train = zmienne_wejściowe_wartości_treningowe y_train = zmienne_wartościowe_wartości_training_datasets x_test = zmienne_wejściowe_valase_test_datasets

Utwórz obiekt regresji liniowej

linear = linear_model.LinearRegression ()

Wytrenuj model przy użyciu zestawów treningowych i sprawdź wynik

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

Współczynnik równania i punkt przecięcia

print („Współczynnik: \ n”, linear.coef_) print („Intercept: \ n”, linear.intercept_)

Prognozuj wyjście

przewidywane = linear.predict (x_test) R Kod

Ładowanie zestawów danych dotyczących pociągu i testu

Zidentyfikuj zmienne funkcyjne i odpowiedzi oraz wartości muszą być tablicami liczbowymi i liczbowymi

x_train <- wartości zmiennych wejściowych

Wytrenuj model przy użyciu zestawów treningowych i sprawdź wynik

liniowe <- lm (y_train ~., data = x) podsumowanie (liniowe)

Prognozuj wyjście

przewidywane = przewidywane (liniowe, x_test)

dileep balineni
źródło
0

Nie sądzę, że Python ma GUI typu point-click, które zamieniają go w SPSS i SAS. Zabawa z nimi jest naprawdę fajna.

ran8
źródło
0

wprowadź opis zdjęcia tutaj

Mam ten obraz w poście z linkiem. Ilekroć mam wątpliwości co do używania Pythona lub R, zaglądam do niego i okazuje się to bardzo przydatne.

Bieg
źródło
Więc co wybierasz?
Serhii Polishchuk