Python vs R для машинного обучения

101

Я только начинаю разрабатывать приложение машинного обучения для академических целей. В настоящее время я использую R и тренируюсь в этом. Тем не менее, во многих местах я видел людей, использующих Python .

Что люди используют в научных кругах и промышленности, и какова рекомендация?

Peter Mortensen
источник
3
Ну, какой тип машинного обучения (изображение / видео? НЛП? Финансовое? Астрономия?), Какие классификаторы, какие наборы данных размера (Мб? Гб? Тб?), Какой масштаб, какая задержка, на какой платформе (мобильный / одиночный компьютер) / многожильный / кластер / облака) ...? Какие конкретные библиотеки будут использовать / нужны ваше приложение, и проверили ли вы, что доступно на каждом языке? Вы просто создаете игрушечное приложение для личного обучения или имеет значение, будет ли оно когда-либо произведено? Используете открытый код или проприетарный? Будете ли вы работать с другими людьми или существующими приложениями, и что они используют / поддерживают? Веб-интерфейс / GUI? и т. д.
smci
1
Одним из наблюдений является то, что Python больше используется для машинного обучения людей, работающих с большими наборами данных, в то время как R больше используется традиционными «статистиками», например, теми, кто работает с психологическими экспериментами с сотнями точек данных. Хотя эта разница может уменьшаться.
xji
питон весь путь человек! Я делаю 4 раза то, что делают мои коллеги за один день. И вы можете использовать python для всех видов задач программирования, а не только для машинного обучения.
Франческо Пегораро

Ответы:

91

Некоторые действительно важные различия, которые следует учитывать при выборе R или Python друг над другом:

  • Машинное обучение имеет 2 этапа. Этап построения модели и прогнозирования. Как правило, построение модели выполняется в виде пакетного процесса, а прогнозы выполняются в режиме реального времени . Процесс построения модели - это интенсивный вычислительный процесс, в то время как прогнозирование происходит в одно мгновение. Следовательно, производительность алгоритма в Python или R на самом деле не влияет на время оборота пользователя. Python 1, R 1.
  • Производство: реальная разница между Python и R заключается в готовности к производству. Python как таковой является полноценным языком программирования, и многие организации используют его в своих производственных системах. R - это программное обеспечение для статистического программирования, предпочитаемое многими академическими кругами, и в связи с ростом науки о данных и доступности библиотек, а также с открытым исходным кодом, промышленность начала использовать R. Многие из этих организаций имеют свои производственные системы на Java, C ++, C #, Python и т. Д. Итак, в идеале они хотели бы иметь систему прогнозирования на одном языке, чтобы уменьшить задержки и проблемы обслуживания. Python 2, R 1.
  • Библиотеки: оба языка имеют огромные и надежные библиотеки. В R более 5000 библиотек, обслуживающих множество доменов, в то время как в Python есть несколько невероятных пакетов, таких как Pandas, NumPy, SciPy, Scikit Learn, Matplotlib . Python 3, R 2.
  • Развитие: оба языка являются интерпретируемыми языками. Многие говорят, что Python легко выучить, это почти как чтение английского языка (чтобы поместить его в более легкую ноту), но R требует больше начальных усилий для изучения. Кроме того, у них обоих есть хорошие IDE (Spyder и т. Д. Для Python и RStudio для R). Python 4, R 2.
  • Скорость: у программного обеспечения R изначально были проблемы с большими вычислениями (скажем, с умножением матриц nxn). Но эта проблема решается с введением R в Revolution Analytics. Они переписали интенсивные вычисления на C, что невероятно быстро. Python является языком высокого уровня относительно медленно. Python 4, R 3.
  • Визуализации. В науке о данных мы часто стремимся наносить данные на график, чтобы продемонстрировать пользователям шаблоны. Поэтому визуализация становится важным критерием при выборе программного обеспечения, и R полностью убивает Python в этом отношении. Спасибо Hadley Wickham за невероятный пакет ggplot2. R выигрывает руки вниз. Python 4, R 4.
  • Работа с большими данными: одно из ограничений R - это сохранение данных в системной памяти (RAM). Таким образом, объем оперативной памяти становится ограничением при работе с большими данными. Python работает хорошо, но я бы сказал, поскольку и R, и Python имеют разъемы HDFS, использование инфраструктуры Hadoop позволило бы существенно повысить производительность. Итак, Python 5, R 5.

Итак, оба языка одинаково хороши. Поэтому, в зависимости от вашего домена и места работы, вы должны правильно выбрать правильный язык. Мир технологий обычно предпочитает использовать один язык. Бизнес-пользователи (маркетинговая аналитика, розничная аналитика) обычно используют статистические языки программирования, такие как R, поскольку они часто делают быстрые прототипы и создают визуализации (что быстрее в R, чем в Python).

бинга
источник
15
R едва ли превосходит Python в визуализации. Я думаю, что это скорее наоборот; Python не только имеет ggplot (который я не использую сам, так как есть больше вариантов pythonic , например, seaborn ), он может даже выполнять интерактивную визуализацию в браузере с помощью таких пакетов, как bokeh .
Эмре
10
Также у R есть возможность интерактивного общения с Shiny.
stanekam
13
Библиотекари - я совсем не согласен с этим. R - безусловно, самый богатый набор инструментов, и более того, он предоставляет информацию надлежащим образом, частично путем наследования S, частично одним из крупнейших сообществ известных экспертов.
Рапайо
34
«Скорость: у программного обеспечения R изначально были проблемы с большими вычислениями (скажем, с умножением матриц nxn). Но эта проблема решена с введением R в Revolution Analytics. Они переписали интенсивные вычисления на C, что невероятно быстро. Python как язык высокого уровня относительно медленный. " Я не опытный пользователь R, но, насколько я знаю, почти все с низкоуровневыми реализациями в R также имеет аналогичную низкоуровневую реализацию в numpy / scipy / pandas / scikit-learn / what. Python также имеет numba и cython. Этот момент должен быть галстуком.
Дугал
8
Для вашего комментария «Работа с большими данными» я бы добавил, что python является одним из 3 языков, поддерживаемых Apache Spark, с невероятно высокой скоростью. Ваш комментарий о том, что R имеет бэкенд C, верен, но и python библиотека scikitlearn также очень быстрая. Я думаю, что ваш пост имеет хороший баланс, но я утверждаю, что скорость, по крайней мере, ничтожна, а масштабируемость (то есть обработка больших данных), безусловно, в пользу Python.
Jagartner
23

Нет ничего лучше "python лучше" или "R намного лучше, чем x".

Единственный факт, который я знаю, - это то, что в промышленности многие люди придерживаются Python, потому что это то, что они узнали в университете. Сообщество Python действительно активно и имеет несколько отличных платформ для ML и интеллектуального анализа данных и т. Д.

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

Так что просто придерживайтесь языка, который вам удобен.

Johnny000
источник
5
Но как насчет библиотек? Существуют расширенные R-пакеты (например, Ranfom Forest или Caret), которые было бы совершенно нецелесообразно переопределять на языке общего назначения, таком как C или Java
Santiago Cepas
mahout т.е. поддерживает случайный лес для Java
Johnny000
1
Да, может быть, но R не дает такой производительности, которая необходима для обработки больших наборов данных, и большую часть времени у вас есть действительно большие наборы данных для промышленного использования.
Johnny000
1
Да, хороший программист может сделать то же самое в C. НО плохой программист может сделать это в Python так же быстро, как опытный программист может сделать это в C.
Pithikos
1
Я не думаю, что это всегда так @Pithikos. Учитывая базовые математические формулы, я обычно могу сам быстрее реализовать их с VB / T-SQL быстрее, чем я, пробираясь через излишне загадочный синтаксис для библиотек R или Python. И в процессе, сделайте полученный код гораздо более масштабируемым. Я рад, что эти библиотеки существуют, но в них есть недостатки; в некоторых ситуациях и конкретных проектах лучше их обойти.
SQLServerSteve
16

Некоторые дополнительные мысли.

Язык программирования «per se» - это всего лишь инструмент. Все языки были разработаны, чтобы сделать некоторые типы конструкций более легкими для построения, чем другие. А знание и владение языком программирования важнее и эффективнее, чем возможности этого языка по сравнению с другими.

Насколько я вижу, есть два аспекта этого вопроса. Первое измерение - это способность быстро исследовать, создавать концепции или модели, имея в конечном итоге достаточно инструментов для изучения происходящего (например, статистические тесты, графики, инструменты измерения и т. Д.). Этот вид деятельности обычно предпочитают исследователи и исследователи данных (мне всегда интересно, что это значит, но я использую этот термин для его свободного определения). Они склонны полагаться на хорошо известные и проверенные инструменты, которые можно использовать для доказательств или аргументов.

Второе измерение - это способность расширять, изменять, улучшать или даже создавать инструменты, алгоритмы или модели. Для этого вам нужен правильный язык программирования. Примерно все они одинаковы. Если вы работаете в компании, вы сильно зависите от инфраструктуры компании, внутренняя культура и ваш выбор значительно уменьшаются. Кроме того, когда вы хотите реализовать алгоритм для производственного использования, вы должны доверять реализации. А внедрение на другом языке, которым вы не владеете, не очень вам поможет.

Я склоняюсь к первому виду деятельности в экосистеме R. У вас отличное сообщество, огромный набор инструментов, доказательство того, что эти инструменты работают, как и ожидалось. Кроме того, вы можете рассмотреть Python, Octave (чтобы назвать несколько), которые являются надежными кандидатами.

Для второго задания вы должны подумать раньше о том, что вы действительно хотите. Если вам нужны надежные готовые к работе инструменты, то C / C ++, Java, C # являются отличными кандидатами. Я считаю Python вторым гражданином в этой категории вместе со Scala и друзьями. Я не хочу начинать пламенную войну, это только мое мнение. Но после более чем 17-летнего опыта работы разработчиком я предпочитаю строгий контракт и мои знания, а не свободу делать то, о чем вы думаете (как это происходит со многими динамическими языками).

Лично я хочу узнать как можно больше. Я решил, что должен выбрать сложный путь, а значит самому все реализовать. Я использую R в качестве модели и вдохновения. Он имеет большие сокровища в библиотеках и богатый опыт. Однако R как язык программирования для меня - кошмар. Поэтому я решил использовать Java и не использовать дополнительную библиотеку. Это только из-за моего опыта, и ничего больше.

Если у вас есть время, лучшее, что вы можете сделать, это провести некоторое время со всеми этими вещами. Таким образом, вы заработаете для себя лучший ответ, подходящий для вас. Дейкстра однажды сказал, что инструменты влияют на то, как ты думаешь, поэтому желательно знать свои инструменты, прежде чем позволять им моделировать, как ты думаешь. Вы можете прочитать больше об этом в его знаменитой газете «Смиренный программист».

рапайо
источник
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 и т. Д.).

Kaushalya
источник
8

Там нет "лучшего" языка. Я попробовал оба из них, и я доволен Python, поэтому я работаю только с Python. Хотя я все еще учусь, но до сих пор я не сталкивался с какими-либо препятствиями на Python. Хорошая вещь о Python - это то, что сообщество слишком хорошо, и вы можете легко получить помощь в Интернете. Кроме этого, я бы сказал, что вы должны использовать язык, который вам не нравится, который люди рекомендуют.

Pensu
источник
8

По моему опыту, ответ зависит от проекта под рукой. Для чистого исследования я предпочитаю R по двум причинам: 1) большое разнообразие библиотек и 2) большая часть литературы по науке о данных включает образцы R.

Если проекту требуется интерактивный интерфейс для использования неспециалистами, я считаю, что R слишком ограничен. Блестящий - отличное начало, но он еще недостаточно гибок. В этих случаях я начну смотреть на перенос своей работы с R на Python или js.

Rglish
источник
8

Проблема, на которую все остальные ответы не решаются, - это лицензирование .

Большинство из упомянутых замечательных библиотек R являются GPL (например, ggplot2 , data.table ). Это препятствует распространению вашего программного обеспечения в проприетарной форме.

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

В области Python, с другой стороны, большинство библиотек имеют лицензии на распространение для бизнеса, такие как BSD или MIT.

В научных кругах вопросы лицензирования обычно не являются проблемой.

оборота нкасас
источник
7

Не так много, чтобы добавить к предоставленным комментариям. Единственное, может быть, это инфографика, сравнивающая R с Python для целей науки о данных http://blog.datacamp.com/r-or-python-for-data-analysis/

Мартейн
источник
6

Одна из реальных проблем, с которой я столкнулся в R, заключается в том, что разные пакеты совместимы с разными версиями .. довольно много пакетов R недоступно для последней версии R .. И R довольно часто выдает ошибку из-за того, что библиотека или пакет были написаны для более старых версия..

Баран
источник
3
Я не уверен, что это особая проблема с R, или что она отвечает на вопрос, как отличаются Python и R.
Шон Оуэн
5

Я не пробовал R (ну, немного, но недостаточно, чтобы сделать хорошее сравнение). Тем не менее, вот некоторые сильные стороны питонов:

  • Очень интуитивный синтаксис : кортеж распаковка, element in a_list, for element in sequence, matrix_a * matrix_b(для умножения матриц), ...
  • Многие библиотеки :
    • scipy : научные вычисления; многие его части - только обертки для довольно быстрого кода на Фортране
    • 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) и функции практически для любой статистической операции / построения модели, которую вы можете захотеть сделать. С момента появления панд она стала очень сильной в операциях со структурированными данными.

Код Python

Библиотека импорта

Импортируйте другие необходимые библиотеки, такие как pandas, numpy ...

из sklearn import 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_)

Прогнозировать выход

прогнозируемый = linear.predict (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, я смотрю на это, и это оказывается очень полезным.

Arun
источник
Так что вы выбираете?
Сергей Полищук