機械学習のためのPython vs R


101

学術目的で機械学習アプリケーションを開発し始めたところです。私は現在Rを使用しており、Rで自分を訓練しています。しかし、多くの場所で、Pythonを使用している人を見てきました。

学界や産業界で人々は何を使用していますか?また、推奨事項は何ですか?


3
さて、どのタイプの機械学習(画像/ビデオ?NLP?金融?天文学?)、どの分類子、どのサイズのデータ​​セット(Mb?Gb?Tb?)、どの規模、どのレイテンシ、どのプラットフォーム(モバイル/シングルコンピューター) / multicore / cluster / cloud)...?アプリケーションはどの特定のライブラリを使用/必要とし、各言語で利用可能なものをチェックしましたか?個人学習用のおもちゃアプリケーションを作成しているだけですか、それとも製品化されたとしても重要ですか?オープンソースまたはプロプライエタリを使用していますか?他の人や既存のアプリと一緒に仕事をしますか?彼らは何を使用/サポートしますか?Webフロントエンド/ GUI?など
smci 16

1
観測の1つは、Pythonは大きなデータセットを扱う機械学習の人々により多く使用され、Rは従来の「統計学者」、例えば数百のデータポイントを使用する心理学実験に使用される人々により多く使用されることです。ただし、その差は縮小しているかもしれません。
-xji

pythonずっと男!私は同僚が1日で行うことの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(Pythonの場合はSpyderなど、Rの場合はRStudio)があります。Python 4、R 2。
  • 速度: Rソフトウェアには、最初は大規模な計算(nxn行列乗算など)で問題がありました。ただし、この問題はRevolution AnalyticsによるRの導入で対処されています。彼らはCで計算集約的な操作を書き直しました。これは非常に高速です。Pythonが高水準言語であることは比較的遅いです。Python 4、R 3。
  • 視覚化:データサイエンスでは、ユーザーにパターンを示すためにデータをプロットする傾向があります。したがって、視覚化はソフトウェアを選択する際の重要な基準となり、Rはこの点でPythonを完全に殺します。信じられないほどのggplot2パッケージを提供してくれたHadley Wickhamに感謝します。Rが勝ちます。Python 4、R 4。
  • ビッグデータの処理: Rの制約の1つは、システムメモリ(RAM)にデータを保存することです。そのため、ビッグデータを処理する場合、RAM容量は制約になります。Pythonはうまく機能しますが、RとPythonの両方にHDFSコネクタがあるため、Hadoopインフラストラクチャを活用するとパフォーマンスが大幅に向上します。だから、Python 5、R 5。

したがって、どちらの言語も同等に優れています。したがって、ドメインと作業場所に応じて、適切な言語を賢く選択する必要があります。テクノロジーの世界では通常、単一の言語を使用することを好みます。ビジネスユーザー(マーケティング分析、小売分析)は通常、Rのような統計プログラミング言語を使用します。なぜなら、彼らは頻繁に迅速なプロトタイピングを行い、視覚化を構築するからです(PythonよりもRの方が高速です)。


15
Rは視覚化でPythonをほとんど打ち負かしません。むしろ逆だと思う。pythonにはggplotがあるだけでなく(seabornのようなpythonicオプションがあるため、自分では使用していません)、bokehなどのパッケージを使用してブラウザーでインタラクティブな視覚化を行うこともできます。
エムレ14年

10
また、RはShinyとインタラクティブなvizを実行できます。
スタネカム14年

13
Librariers-私はそれに全く同意しません。Rは、はるかに豊富なツールセットであり、Sを継承すること、評判の高い専門家の最大のコミュニティの1つによって、適切な方法で情報を提供します。
ラパイオ14年

34
「Speed:Rソフトウェアは、最初は大規模な計算(nxn行列の乗算など)で問題がありました。しかし、この問題はRevolution AnalyticsによるRの導入で対処されています。 Pythonが高水準言語であることは比較的遅いです。」私は経験豊富なRユーザーではありませんが、Rでの低レベル実装のほとんどすべてが、numpy / scipy / pandas / scikit-learn / whateverでも同様の低レベル実装を持っていることを知っています。Pythonにもnumbaとcythonがあります。この点は同点であるべきです。
-Dougal

8
「ビッグデータを扱う」コメントについては、pythonはapache sparkがサポートする3つの言語の1つであり、非常に高速であると付け加えます。RがCバックエンドを持っていることについてのあなたのコメントは真実ですが、Pythonのscikitlearnライブラリも非常に高速です。あなたの投稿はバランスがとれていると思いますが、速度は少なくとも同点であり、スケーラビリティ(つまりビッグデータの処理)は確かにpythonを支持していると思います。
ジャガートナー

23

「pythonの方が優れている」または「Rはxよりもはるかに優れている」というようなものはありません。

私が知っている唯一の事実は、それが彼らが大学で学んだことであるので、人々の多くがPythonに固執するということです。Pythonコミュニティは本当に活発で、MLやデータマイニングなどのための優れたフレームワークがいくつかあります。

しかし、正直に言うと、優れたCプログラマーが得られれば、Pythonやrで人々がやるのと同じことができ、優れたJavaプログラマーが得られれば、Javaですべてを(ほぼ)行うことができます。

だからあなたが慣れている言語に固執するだけです。


5
しかし、ライブラリについてはどうでしょうか?CやJavaなどの汎用言語での再実装にはまったく実用的ではない高度なRパッケージ(Ranfom ForestまたはCaretを考えてください)があります
サンティアゴセパス14年

象使いすなわちJava用のランダムフォレストをサポート
Johnny000

1
そうかもしれませんが、Rは大きなデータセットを処理するために必要なパフォーマンスをまったくもたらさず、ほとんどの場合、産業で使用される非常に大きなデータセットがあります。
Johnny000

1
はい、良いプログラマーはCでも同じことができます。しかし、悪いプログラマーは、経験豊富なプログラマーがCでできるのと同じくらい速くPythonでできます
。– Pithikos

1
@Pithikosが常に真実だとは思いません。基礎となる数学式を考えると、通常、RまたはPythonライブラリの不必要な難解な構文を歩くよりも、VB / T-SQLを使用してより速く自分でVB / T-SQLを実装できます。そして、その過程で、結果のコードをはるかにスケーラブルにします。これらのライブラリが存在することを嬉しく思いますが、それらに組み込まれている欠点があります。状況や特定のプロジェクトでは、それらをバイパスする方が良いでしょう。
SQLServerSteve

16

いくつかの追加の考え。

プログラミング言語「それ自体」は単なるツールです。すべての言語は、ある種の構造を他の構造よりも簡単に構築できるように設計されています。また、プログラミング言語の知識と習熟は、他の言語に比べてその言語の機能よりも重要かつ効果的です。

私が見る限り、この質問には2つの側面があります。最初の次元は、概念またはモデルの検証を迅速に探索し、構築し、最終的には何が起こっているかを調査するのに十分なツール(統計テスト、グラフィックス、測定ツールなど)を手に入れる能力です。この種の活動は、通常、研究者やデータ科学者に好まれています(それが何を意味するのか、私はいつも疑問に思っていますが、私はこの用語をその緩い定義に使用しています)。彼らは、証明または議論に使用できる、よく知られ検証された機器に依存する傾向があります。

2番目の次元は、ツール、アルゴリズム、モデルを拡張、変更、改善、さらには作成する能力です。それを実現するには、適切なプログラミング言語が必要です。ほぼすべてが同じです。会社で働く場合、会社のインフラストラクチャ、内部文化に大きく依存するよりも、選択肢が大幅に少なくなります。また、本番用のアルゴリズムを実装する場合は、実装を信頼する必要があります。そして、あなたが習得していない別の言語で実装しても、あまり役に立ちません。

私は最初のタイプの活動であるRエコシステムを好む傾向があります。素晴らしいコミュニティ、膨大なツールセット、これらのツールが期待どおりに機能することの証明があります。また、信頼できる候補であるPython、Octave(数例を挙げると)を検討することもできます。

2番目のタスクでは、あなたが本当に欲しいものを前に考えなければなりません。堅牢な製品対応ツールが必要な場合は、C / C ++、Java、C#が最適な候補です。Pythonは、Scalaや友人とともに、このカテゴリの2番目の市民と考えています。私は炎戦争を始めたくありません、それは私の意見です。しかし、開発者として17年以上経った後、私はあなたが考えるあらゆることをする自由よりも、厳密な契約と私の知識を好む傾向があります(多くの動的言語で起こるように)。

個人的に、私はできるだけ多くを学びたいです。私はハードな方法を選択する必要があると決めました。つまり、すべてをゼロから実装するということです。Rをモデルおよびインスピレーションとして使用します。図書館には大きな宝があり、多くの経験が蓄積されています。しかし、プログラミング言語としてのRは私にとって悪夢です。そこで、Javaを使用し、追加のライブラリを使用しないことにしました。それは私の経験のためだけで、他には何もありません。

時間がある場合、できることは、これらすべてのことに時間を費やすことです。このようにして、あなたは自分に合った可能な限り最高の答えを自分で獲得するでしょう。ダイクストラはかつて、ツールがあなたの考え方に影響を与えると言ったので、あなたがあなたのツールを知ってから、彼らがあなたの考え方をモデル化することをお勧めします。それについては、The Humble Programmerという有名な論文で詳しく読むことができます。


15

私は他の人が今まで言ったことに追加します。1つの言語が他の言語より優れているという単一の答えはありません。

そうは言っても、Rにはデータ探索と学習のためのより良いコミュニティがあります。広範な視覚化機能を備えています。一方、Pythonは、パンダの導入以来、データ処理が向上しています。Pythonは、R(Rは低レベル言語)と比較して、学習および開発時間は非常に短くなっています。

最終的には、あなたがいるエコシステムと個人的な好みに帰着すると思います。詳細については、こちらの比較をご覧ください


2
「Rは[...]学習のためのより良いコミュニティを持っています」-これは学習のタイプに大きく依存していると思います。Rのニューラルネットワーク(任意のフィードフォワードアーキテクチャ、CNN、RNN)でどのくらい進んでいますか?
マーティントーマ

1
Rは実際にはそれほど「低レベル」なIMOではありません。また、動的言語です。
-xji

12

すべてのデータ関連の問題を解決するために使用できる特効薬の言語はありません。言語の選択は、問題のコンテキスト、データのサイズに依存し、職場で作業している場合は、使用するものに固執する必要があります。

個人的には、視覚化ライブラリとインタラクティブなスタイルのため、PythonよりもRを頻繁に使用しています。しかし、より多くのパフォーマンスや構造化コードが必要な場合は、SciKit-Learn、numpy、scipyなどの最高のライブラリがあるので、間違いなくPythonを使用します。プロジェクトではRとPythonの両方を交換可能に使用します。

したがって、データサイエンスの仕事に取り掛かる場合は、両方を学ぶことをお勧めします。PythonもRと同様のインターフェースをPandasで提供しているため、難しくありません。

より大きなデータセットを扱う必要がある場合、Javaで構築されたエコシステム(Hadoop、Pig、Hbaseなど)をエスケープすることはできません。


8

「より良い」言語はありません。両方とも試してみましたが、Pythonに慣れているので、Pythonのみで作業します。私はまだいろいろなことを学んでいますが、今までPythonで障害に遭遇したことはありません。Pythonの良いところは、コミュニティが良すぎて、インターネットで簡単に多くの助けを得ることができることです。それ以外に、私はあなたが好きな言語ではなく、人々が推奨する言語で行くと言うでしょう。


8

私の経験では、答えは手元のプロジェクトに依存します。純粋な研究のために、私は2つの理由でRを好みます。1)多種多様なライブラリーと2)データ科学文献の多くにRサンプルが含まれています。

素人がインタラクティブインターフェイスを使用する必要があるプロジェクトの場合、Rの制約が大きすぎることがわかりました。Shinyは素晴らしいスタートですが、まだ十分な柔軟性がありません。これらのケースでは、Rの作業をPythonまたはjsに移植することから始めます。


8

他のすべての回答が対処できない問題は、ライセンスです。

前述の素晴らしいRライブラリのほとんどはGPL(例えばggplot2data.table)です。これにより、独自の形式でソフトウェアを配布できなくなります

これらのライブラリの多くの使用法はソフトウェアの配布を意味しませんが(たとえば、モデルをオフラインでトレーニングするため)、GPL自体はそれらを使用することから企業を誘います。少なくとも私の経験では。

一方、Python領域では、ほとんどのライブラリには、BSDやMITなどのビジネス向けの配布ライセンスがあります。

学界では、ライセンスの問題は通常、問題ではありません。



6

Rに直面した本当の課題の1つは、さまざまなバージョンと互換性のあるさまざまなパッケージです。.Rの最新バージョンでは、かなり多くのRパッケージを利用できません。版..


3
これがRの特定の問題なのか、PythonとRがどのように異なるのかという質問に答えているのかどうかはわかりません。
ショーンオーウェン14年

5

私はRを試していません(まあ、少しですが、良い比較をするのに十分ではありません)。ただし、Pythonの長所のいくつかを次に示します。

  • 非常に直感的な構文:タプルアンパック、element in a_listfor element in sequencematrix_a * matrix_b(行列の乗算用)、...
  • 多くのライブラリ
    • scipy:科学計算; その多くの部分は、非常に高速なFortranコードのラッパーにすぎません
    • theano > Lasagne > nolearn:ニューラルネットワークのライブラリ-調整なしでGPU(nvidia、CUDAが必要)でトレーニングできます
    • sklearn:一般的な学習アルゴリズム
  • 良いコミュニティ
  • IPythonノートブック
  • その他
    • 0インデックス付き配列...私はRでいつもそのエラーを犯しました。
    • 確立されたパッケージ構造
    • コードのテストに対する優れたサポート

3

PythonはRよりもPythonが好きです。Pythonは完全なプログラミング言語であるため、Pythonで記述されたHTTPサーバーを使用してデータを収集し、高度なMLタスクを実行して結果をオンラインで公開するなど、エンドツーエンドの機械学習タスクを実行できるためです これはすべてPythonで実行できます。実際、Rは学習するのが難しく、ほとんどすべてのプログラミングタスクに使用できるため、Pythonの学習に対する見返りははるかに大きいとわかりました。


2
R
Gaius

2

R:Rは対応するオープンソースです。これは伝統的に学者や研究で使用されてきました。オープンソースの性質のため、最新の技術はすぐにリリースされます。インターネットを介して利用可能な多くのドキュメントがあり、それは非常に費用対効果の高いオプションです。Python:オープンソースのスクリプト言語としての起源により、Pythonの使用は時間とともに増加しました。今日では、ライブラリ(numpy、scipy、matplotlib)と、実行したいほぼすべての統計演算/モデル構築のための機能を備えています。パンダの導入以来、構造化データの操作で非常に強力になりました。

Pythonコード

インポートライブラリ

パンダ、numpyなどのその他の必要なライブラリをインポート...

sklearn import linear_modelから

ロードトレインおよびテストデータセット

特徴と応答変数を特定し、値は数値配列とnumpy配列でなければなりません

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( 'Coefficient:\ n'、linear.coef_)print( 'Intercept:\ n'、linear.intercept_)

出力を予測する

predicted = linear.predict(x_test)Rコード

ロードトレインおよびテストデータセット

特徴と応答変数を特定し、値は数値配列と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)

トレーニングセットを使用してモデルをトレーニングし、スコアをチェックする

線形<-lm(y_train〜。、data = x)summary(linear)

出力を予測する

予測= predict(linear、x_test)



0

ここに画像の説明を入力してください

この画像はlinkinの投稿で取得しました。pythonやRを使用することに疑問を感じるときはいつでも、私はそれを調べ、それが非常に有用であることを証明します。


それで、あなたは何を選びますか?
Serhiiポーランド語
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.