Python vs R для машинного навчання


101

Я тільки починаю розробляти додаток машинного навчання в академічних цілях. Зараз я використовую R і тренуюсь в ньому. Однак у багатьох місцях я бачив людей, які використовують Python .

Чим користуються люди в наукових колах та промисловості, і яка рекомендація?


3
Ну, який тип машинного навчання (зображення / відео? НЛП? Фінансова? Астрономія?), Які класифікатори, набори даних розміру (Мб? Гб? Тб?), Який масштаб, яка затримка, на якій платформі (мобільний / однокомп'ютерний) / багатоядерний / кластер / хмара) ...? Які конкретні бібліотеки використовуватиме / потребує ваша програма та чи перевіряли ви, що доступно для кожної мови? Ви просто будуєте додаток для іграшок для особистого навчання чи не має значення, якщо воно коли-небудь продукується? Використовуєте відкритий чи захищений? Чи будете ви працювати з іншими людьми або вже наявними додатками, і що вони використовують / підтримують? Веб-інтерфейс / графічний інтерфейс? тощо
smci

1
Одне спостереження полягає в тому, що Python більше використовується машинним навчанням людей, які працюють з великими наборами даних, тоді як R більше використовується традиційними "статистиками", наприклад, тим, хто працює з психологічними експериментами із сотнями точок даних. Хоча ця різниця може зменшуватися.
xji

пітон весь шлях людина! Я роблю 4 рази те, що роблять мої колеги за один день. І ви можете використовувати python для всіх завдань програмування, не тільки машинного навчання.
Франческо Пегораро

Відповіді:


91

Деякі реальні важливі відмінності, які слід враховувати, коли ви вибираєте R або Python один над одним:

  • Машинне навчання має 2 фази. Етап побудови та прогнозування моделі. Зазвичай побудова моделі виконується як пакетний процес, і прогнози робляться в режимі реального часу . Процес побудови моделі - це обчислювальний інтенсивний процес, в той час як прогнозування відбувається миттєво. Тому продуктивність алгоритму в Python або R насправді не впливає на час повороту користувача. Пітон 1, R 1.
  • Виробництво: реальна різниця між Python та R полягає в тому, що виробництво готове. Python як така є повноцінною мовою програмування, і багато організацій використовують її у своїх виробничих системах. R - це програмне забезпечення для статистичного програмування, яке надає перевагу у багатьох наукових колах, і завдяки зростанню наукових даних та доступності бібліотек та відкритому коду, галузь почала використовувати Р. Багато з цих організацій мають свої виробничі системи або на Java, C ++, C #, Python тощо. Отже, в ідеалі вони хотіли б мати систему прогнозування на тій же мові, щоб зменшити проблеми із затримкою та обслуговуванням. Пітон 2, R 1.
  • Бібліотеки: Обидві мови мають величезні та надійні бібліотеки. R має понад 5000 бібліотек, що обслуговують багато доменів, тоді як Python має неймовірні пакети, такі як Pandas, NumPy, SciPy, Scikit Learn, Matplotlib . Пітон 3, R 2.
  • Розвиток: обидві мови є інтерпретованими мовами. Багато хто каже, що пітон легко вивчити, це майже як читання англійської мови (щоб сказати це легше), але R вимагає більше початкових зусиль для вивчення. Крім того, вони мають хороші IDE (Spyder і т.д. для Python і RStudio для R). Пітон 4, R 2.
  • Швидкість: Програмне забезпечення R спочатку мало проблеми з великими обчисленнями (скажімо, як множення матриці nxn). Але це питання вирішується із запровадженням R революцією аналітики. Вони переписали обчислювальні інтенсивні операції в С, що надзвичайно швидко. Будучи мовою високого рівня Python відносно повільним. Пітон 4, R 3.
  • Візуалізації: У науці про дані ми часто схильні будувати дані для демонстрації шаблонів для користувачів. Тому візуалізація стає важливим критерієм при виборі програмного забезпечення, і R повністю вбиває Python в цьому плані. Дякую Адлі Вікхем за неймовірний пакет ggplot2. R виграє руки вниз. Пітон 4, R 4.
  • Робота з великими даними: Одне з обмежень R - це зберігання даних у системній пам'яті (ОЗП). Отже, ємність оперативної пам’яті стає обмеженням при обробці Big Data. У Python добре, але я б сказав, оскільки і R, і Python мають роз'єми HDFS, використання інфраструктури Hadoop дозволило б значно покращити продуктивність. Отже, Python 5, R 5.

Отже, обидві мови однаково хороші. Тому, залежно від вашого домену та місця роботи, ви повинні розумно вибрати правильну мову. Світ технологій зазвичай вважає за краще використовувати одну мову. Ділові користувачі (маркетингова аналітика, роздрібна аналітика) зазвичай використовують такі статистичні мови програмування, як R, оскільки вони часто роблять швидке прототипування та будують візуалізацію (що швидше робиться в R, ніж Python).


15
R навряд чи б’є пітона у візуалізації. Я думаю, це скоріше зворотне; Крім того, у python є ggplot (яким я не користуюся сам, оскільки є більше пітонічних варіантів, як, наприклад, мертвонароджений ), він навіть може робити інтерактивну візуалізацію в браузері з такими пакетами, як bokeh .
Емре

10
Також R має можливість інтерактивної роботи з Shiny.
stanekam

13
Бібліотекарі - я з цим зовсім не згоден. R на сьогоднішній день є найбагатшим набором інструментів, і більше того, що він надає інформацію належним чином, частково успадковуючи S, частково одним із найбільших спільнот відомих експертів.
rapaio

34
"Швидкість: R програмне забезпечення спочатку мали проблеми з великими обчисленнями (скажімо, як множення матриці nxn). Але це питання вирішується введенням R за допомогою Revolution Analytics. Вони переписали інтенсивно обчислювальні операції в C, що надзвичайно швидко. Будучи мовою високого рівня Python відносно повільним ". Я не досвідчений користувач R, але, наскільки я знаю, майже все з низькорівневими реалізаціями в R також має подібну реалізацію низького рівня в numpy / scipy / pandas / scikit-learn / як завгодно. У Python також є numba та cython. Цей момент повинен бути краваткою.
Дугал

8
До Вашого коментаря "Робота з великими даними" я додам, що python - це одна з 3-х мов, що підтримуються іскрою apache, яка має високі швидкості. Ваш коментар про те, що R має задній кінець С, правдивий, але так само пітон бібліотеки scikitlearn також дуже швидкий. Я думаю, що ваш пост має гарний баланс, але я стверджую, що швидкість є принаймні кращою, а масштабованість (тобто обробка великих даних), безумовно, на користь пітона.
jagartner

23

Немає нічого подібного "python is better" або "R is much better than x".

Єдиний факт, який я знаю, - це те, що в галузі галузь людей дотримується пітона, тому що це вони дізналися в університеті. Спільнота python дійсно активна і має кілька чудових рамок для ML та обміну даними тощо.

Але якщо чесно, якщо у вас хороший програміст на c, він може робити те саме, що люди роблять у python або r, якщо у вас хороший програміст Java, він також може робити (біля) все на Java.

Тому просто дотримуйтесь зручної мови.


5
А як щодо бібліотек? Є вдосконалені пакети R (думаю, Ранфом Форест або Карет), які були б абсолютно недоцільними для повторного втілення в мову загального призначення, такі як C або Java
Сантьяго Цепас

mahout, тобто підтримує випадковий ліс для Java
Johnny000

1
Так, можливо, але R взагалі не забезпечує ефективність, необхідну для обробки великих наборів даних, і більшу частину часу у вас є справді великі набори даних у промисловому використанні.
Johnny000

1
Так, хороший програміст може зробити те ж саме в C. Але поганий програміст може зробити це на Python так само швидко, як досвідчений програміст може це зробити у C.
Pithikos

1
Я не думаю, що це завжди правда @Pithikos Враховуючи основні математичні формули, я зазвичай можу їх швидше реалізовувати за допомогою VB / T-SQL швидше, ніж можу, пробираючись через зайво таємний синтаксис або для бібліотек R, або Python. І в цьому процесі зробіть отриманий код набагато масштабнішим. Я радий, що ці бібліотеки існують, але в них є вбудовані мінуси; у деяких ситуаціях та конкретних проектах краще їх обійти.
SQLServerSteve

16

Деякі додаткові думки.

Мова програмування "per se" - лише інструмент. Усі мови були розроблені для того, щоб зробити деякі конструкції легшими в побудові, ніж інші. А знання та оволодіння мовою програмування важливіше та ефективніше, ніж особливості цієї мови порівняно з іншими.

Наскільки я бачу, є два аспекти цього питання. Перший вимір - це здатність швидко досліджувати, будувати докази концепцій чи моделей, з часом маючи під рукою достатньо інструментів для вивчення того, що відбувається (наприклад, статистичні тести, графіка, засоби вимірювання тощо). Цей вид діяльності зазвичай віддають перевагу дослідникам та науковцям даних (мені завжди цікаво, що це означає, але я використовую цей термін для його вільного визначення). Вони, як правило, покладаються на відомі та перевірені інструменти, які можна використовувати для доказів або аргументів.

Другий вимір - це можливість розширювати, змінювати, вдосконалювати або навіть створювати інструменти, алгоритми чи моделі. Для цього вам потрібна відповідна мова програмування. Приблизно всі вони однакові. Якщо ви працюєте в компанії, то ви багато залежите від інфраструктури компанії, внутрішньої культури та вашого вибору значно зменшуються. Крім того, коли ви хочете реалізувати алгоритм для використання виробництва, вам доведеться довіряти реалізації. А реалізація іншою мовою, якою ви не володієте, не дуже допоможе вам.

Я схильний виступати за перший вид діяльності Р-екосистеми. У вас велике співтовариство, величезний набір інструментів, доказ того, що ці інструменти працюють як очікувалося. Також ви можете розглянути Python, Octave (назвати декілька), які є надійними кандидатами.

Для другого завдання вам слід заздалегідь подумати над тим, що ви насправді хочете. Якщо ви хочете отримати надійні інструменти для виготовлення, тоді C / C ++, Java, C # - чудові кандидати. Я вважаю Python другим громадянином цієї категорії разом зі Скалою та друзями. Я не хочу розпочати полум’яну війну, це лише моя думка. Але після більш ніж 17 років, як розробник, я, як правило, віддаю перевагу суворому договору та моїм знанням, ніж свободі робити все, що ви думаєте (як це відбувається з великою кількістю динамічних мов).

Особисто я хочу дізнатися якомога більше. Я вирішив, що мушу вибрати важкий шлях, який означає реалізувати все з нуля. Я використовую R як модель та натхнення. Він має великі скарби в бібліотеках і багато досвіду, що переганяється. Однак R як мова програмування для мене кошмар. Тому я вирішив використовувати Java, і не використовувати жодної додаткової бібліотеки. Це лише через мій досвід, і більше нічого.

Якщо у вас є час, найкраще, що ви можете зробити - це провести деякий час з усіма цими речами. Таким чином ви заробите для себе найкращу можливу відповідь, підходящу для вас. Dijkstra одного разу сказав, що інструменти впливають на те, як ви думаєте, тому бажано знати свої інструменти, перш ніж дозволити їм моделювати, як ви думаєте. Детальніше про це ви можете прочитати в його відомому документі під назвою Програматор смирень


15

Я хотів би додати те, що говорили інші досі. Немає однозначної відповіді, що одна мова краща за іншу.

Сказавши це, R має кращу спільноту для вивчення та вивчення даних. Він має широкі можливості візуалізації. З іншого боку, Python став кращим в обробці даних з моменту введення панд. Час навчання та розвитку в Python дуже менший, порівняно з R (R є мовою низького рівня).

Я думаю, що в кінцевому рахунку це зводиться до екосистеми, в якій ви перебуваєте, та до особистих уподобань. Більш детально ви можете подивитися це порівняння тут .


2
"R має кращу спільноту для [...] навчання" - я думаю, це сильно залежить від типу навчання. Скільки часу відбувається з нейронними мережами (довільною архітектурою подачі, CNN, RNN) у R?
Мартін Тома

1
R насправді не такий ІМО "низького рівня". Це також динамічна мова.
xji

12

Не існує срібної мови кулі, яку можна використати для вирішення кожної проблеми, пов'язаної з даними. Вибір мови залежить від контексту проблеми, розміру даних, і якщо ви працюєте на робочому місці, ви повинні дотримуватися того, що вони використовують.

Особисто я використовую R частіше, ніж Python, завдяки його бібліотекам візуалізації та інтерактивному стилю. Але якщо мені потрібна більша продуктивність або структурований код, я, безумовно, використовую Python, оскільки він має одні з найкращих бібліотек, як SciKit-Learn, numpy, scipy тощо. Я використовую і R, і Python в своїх проектах взаємозамінно.

Отже, якщо ви починаєте роботу над науковими даними, я пропоную вам вивчити і те, і це не складно, оскільки Python також надає інтерфейс, подібний до R з Pandas .

Якщо вам доведеться мати справу з набагато більшими наборами даних, ви не можете уникнути екосистем, побудованих за допомогою Java (Hadoop, Pig, Hbase тощо).


8

Немає «кращої» мови. Я спробував обидва, і мені подобається Python, тому я працюю лише з Python. Хоча я все ще вивчаю речі, але досі не стикався з перешкодами з Python. Гарна річ у Python - це занадто хороша спільнота, і ви можете легко допомогти в Інтернеті. Окрім цього, я б сказав, що йдіть мовою, яка вам подобається, а не тій, яку рекомендують люди.


8

На мій досвід, відповідь залежить від конкретного проекту. Для чистого дослідження я віддаю перевагу R з двох причин: 1) широке різноманіття бібліотек та 2) значна частина науково-дослідної літератури включає зразки R.

Якщо проект вимагає використання інтерактивного інтерфейсу, який використовуються непрофесіоналами, я вважаю, що R занадто обмежений. Блискучий - це чудовий початок, але він ще недостатньо гнучкий. У цих випадках я почну розглядати перенесення моєї роботи R на Python або js.


8

Питання, на яке не відповідають інші питання, - це ліцензування .

Більшість згаданих чудових бібліотек R - це GPL (наприклад, ggplot2 , data.table ). Це заважає поширювати програмне забезпечення у фірмовій формі.

Хоча багато звичаїв цих бібліотек не передбачають розповсюдження програмного забезпечення (наприклад, для навчання моделей в режимі офлайн), GPL може сам виманити компанії від їх використання. Принаймні в моєму досвіді.

З іншого боку, у царині python більшість бібліотек мають зручні для бізнесу ліцензії на розповсюдження, такі як BSD або MIT.

У наукових закладах питання ліцензування зазвичай не є питаннями.



6

Однією з реальних проблем, з якою я стикався з R, є різні пакети, сумісні з різними версіями .. досить багато пакетів R не доступні для останньої версії R .. І R досить багато часу дає помилку через те, що бібліотека або пакет був написаний для старих версія ..


3
Я не впевнений, що це особлива проблема з R або що він відповідає на питання, чим Python і R відрізняються.
Шон Оуен

5

Я не пробував R (ну трохи, але недостатньо, щоб зробити хороше порівняння). Однак ось деякі з сильних пітонів:

  • Дуже інтуїтивний синтаксис : кортеж розпакування, element in a_list, for element in sequence, matrix_a * matrix_b(для множення матриць), ...
  • Багато бібліотек :
    • scipy : Наукові обчислення; багато його частин є лише обгортками для досить швидкого коду Fortran
    • Theano > Лазанья > nolearn : Бібліотеки для нейронних мереж - вони можуть навчатися на GPU (NVIDIA, CUDA потрібно) без будь - яких регулювань
    • sklearn : Загальні алгоритми навчання
  • Добре співтовариство :
  • Зошити IPython
  • Різне :
    • 0-індексовані масиви ... Я постійно помилявся з R.
    • Створені структури пакетів
    • Хороша підтримка для тестування вашого коду

3

Я віддаю перевагу Python над R, тому що Python є повноцінною мовою програмування, тому я можу виконувати цілі завдання для машинного навчання, такі як збирати дані за допомогою HTTP-сервера, написаного на Python, виконувати розширені завдання ML та публікувати результати в Інтернеті. Це все можна зробити в Python. Я фактично виявив, що R важче навчитися, і корисність за навчання Python набагато більша, оскільки його можна використовувати майже для будь-якого завдання програмування.


2
Ви можете дуже легко зробити всі ці 3 речі в R
Gaius

2

R: R - аналог з відкритим кодом. який традиційно використовується в наукових колах та дослідженнях. Через свою природу з відкритим кодом, новітні методи швидко випускаються. В Інтернеті є багато документації, і це дуже економічний варіант. Python: З походженням як мовою сценаріїв з відкритим кодом використання Python з часом зростає. Сьогодні це спортивні бібліотеки (numpy, scipy та matplotlib) та функціонують майже для будь-якої статистичної операції / побудови моделі, яку ви можете зробити. З моменту впровадження панд вона стала дуже сильною в операціях зі структурованими даними.

Код Пітона

Імпорт бібліотеки

Імпортуйте інші необхідні бібліотеки, наприклад, панди, numpy ...

з імпорту sklearn linear_model

Завантажте набори поїздів та тестів

Визначте змінну (и) функції та відповіді та значення повинні бути числовими та нумеровими масивами

x_train = input_variables_values_training_datasets y_train = target_variables_values_training_datasets x_test = input_variables_values_test_datasets

Створення об’єкта лінійної регресії

linear = linear_model.LinearRegression ()

Тренуйте модель, використовуючи навчальні набори та перевіряйте бал

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

Коефіцієнт рівняння та перехоплення

print ('Коефіцієнт: \ n', linear.coef_) print ('Перехоплення: \ n', linear.intercept_)

Прогнозуйте вихід

прогнозований = лінійний.прогнозувати (x_test) код R

Завантажте набори поїздів та тестів

Визначте змінну (и) функції та відповіді та значення повинні бути числовими та нумеровими масивами

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)

Тренуйте модель, використовуючи навчальні набори та перевіряйте бал

лінійний <- lm (y_train ~., data = x) підсумок (лінійний)

Прогнозуйте вихід

прогнозований = прогнозувати (лінійний, x_test)



0

введіть тут опис зображення

Я отримав це зображення у посиланні на зв’язку. Щоразу, коли у мене виникають сумніви щодо використання python або R, я розглядаю це, і це виявляється дуже корисним.


То що ви обираєте?
Сергій Поліщук
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.