質問

私はです R 言語プログラマー。私はまた、データサイエンティストと見なされているが、CS以外の学問分野から来ている人々のグループにもいます。

これは、データサイエンティストとしての私の役割においてうまく機能しますが、私のキャリアを始めて R そして、他のスクリプト/Web言語に関する基本的な知識のみを持っているだけで、2つの重要な領域ではやや不十分だと感じました。

  1. プログラミング理論の強固な知識の欠如。
  2. より速く、より広く使用されている言語での競争力のあるレベルのスキルの欠如 C, C++Java, 、これを利用して、パイプラインとビッグデータの計算の速度を上げるだけでなく、高速バックエンドスクリプトまたはスタンドアロンアプリケーションに容易に開発できるDS/データ製品を作成できます。

もちろん、ソリューションは簡単です。プログラミングについて学びましょう。これは、一部のクラス(現在はCプログラミング)に登録することで私が行ってきたことです。

しかし、私は上記の問題#1と#2に対処し始めているので、私は自問しています」言語はどれだけ実行可能か CC++ データサイエンスのために?".

たとえば、データを非常に迅速に移動し、ユーザーとうまくやり取りすることができますが、高度な回帰、機械学習、テキストマイニング、その他のより高度な統計操作についてはどうでしょうか?

それで。できる C 仕事をしています - 高度な統計、ML、AI、およびデータサイエンスのその他の分野で利用できるツールは何ですか? または、プログラミングによって得られる効率のほとんどを失う必要があります C 電話をかけることによって R スクリプトまたはその他の言語?

Cでこれまでに見つけた最高のリソースは、呼ばれるライブラリです , 、それは与えます C/C++ サポートベクトルマシン、線形回帰(非線形およびその他の高度な回帰などの高度な回帰などを使用する機能、および他の(素晴らしい)統計関数の最終リスト。

役に立ちましたか?

解決

または、Rスクリプトまたは他の言語を呼び出すことにより、Cでプログラミングすることで得られる効率のほとんどを失う必要がありますか?

逆のことを行います:c/c ++を学び、r拡張機能を記述します。 C/C ++を使用して、新しいアルゴリズムのパフォーマンスクリティカルセクションにのみ、Rを使用して分析を構築し、データをインポートし、プロットを作成します。

Rを超えたい場合は、Pythonを学ぶことをお勧めします。などの多くのライブラリがあります Scikit-Learn 機械学習アルゴリズム用または pybrain ニューラルネットワークなどを構築するために(およびPylab/を使用します/matplotlib プロットのために IPythonノートブック 分析を開発するには)。繰り返しますが、C/C ++は、Python拡張機能としてTime Criticalアルゴリズムを実装するのに役立ちます。

他のヒント

Andre Holznerが言ったように、C/C ++拡張でRを拡張することは、双方の最高のものを利用するための非常に良い方法です。また、逆を試して、C ++で作業し、リンシドパッケージを使用してrの関数を呼び出すことを試してみることができます。ここであなたはその方法を見つけることができます

http://cran.r-project.org/web/packages/rinside/index.html http://dirk.eddelbuettel.com/code/rinside.html

C ++で作業すると、多くのライブラリがあり、それらの多くは特定の問題のために構築されています。

http://www.shogun-toolbox.org/page/features/ http://image.diku.dk/shark/sphinx_pages/build/html/index.html

http://mlpack.org/

現在の傾向は、Python/Rを使用し、計算上の高価なタスクのためにいくつかのC/C ++拡張機能に結合することであることに同意します。

ただし、C/C ++にとどまりたい場合は、dlib:

DLIBは、契約プログラミングと最新のC ++技術を使用して設計された汎用クロスプラットフォームC ++ライブラリです。これはオープンソースソフトウェアであり、Boost Softwareライセンスの下でライセンスされています。

enter image description here

私の意見では、理想的にはもっと バランスのとれた 専門家、知っておくといいでしょう 少なくとも 最も人気のあるプログラミング言語の1つ プログラミングパラダイム (手続き, オブジェクト指向, 機能)。確かに、私は考えています rPython の2つの最も人気のあるプログラミング言語と環境として データサイエンス したがって、 主要な データサイエンスツール。

ジュリア 特定の側面では印象的ですが、これら2つに追いつき、主要なデータサイエンスツールとしての地位を確立しようとします。しかし、私はこれがすぐに起こっているとは思わない、単に r/python's 人気, 、 非常に大きい コミュニティ 巨大なだけでなく 生態系 既存および新しく開発された パッケージ/ライブラリ, 、非常に幅広いドメイン /研究分野をカバーします。

とはいえ、データサイエンス、MLおよびAI領域に焦点を当てた多くのパッケージとライブラリは、 実装 および/または提供します API RまたはPython以外の言語(証明については、 このキュレートリストこのキュレートリスト, 、どちらも優れており、フィールドの多様性について確固たる視点を与えます)。これは特に当てはまります パフォーマンス指向 また 専門 ソフトウェア。そのソフトウェアでは、主にJava、C、C ++で実装および/またはAPIを備えたプロジェクトを見てきました(Javaは特に人気があります ビッグデータ データサイエンスのセグメント - その近さのため Hadoop そしてそのエコシステム - そして NLP セグメント)、しかし、他のオプションは、はるかに限られたドメインベースの範囲ではありますが、利用可能です。これらの言語のどちらも時間の無駄ではありませんが、あなたはしなければなりません 優先順位を付けます 現在の仕事の状況、プロジェクト、関心でそれらのいずれかまたはすべてをマスターします。だから、C/C ++(およびJava)の生存率に関するあなたの質問に答えるために、私はそれらがすべてだと言うでしょう 実行可能, 、しかしそうではありません 主要な データサイエンスツールですが、 二次 ワンズ。

1)であなたの質問に答える c として 潜在的なデータサイエンスツール および2)その 効率, 、私はそれを言うでしょう:1)それは可能ですが c データサイエンスの場合、i 反対することをお勧めします それを行うには、対応するライブラリを見つけるのに非常に苦労しているか、それ以上に、自分で対応するアルゴリズムを実装しようとしているからです。 2)コードのパフォーマンスが批判的なセグメントの多くがCなどの低レベルの言語で実装されているため、効率を心配する必要はありません。 Rcpp C/C ++との統合Rのパッケージ: http://dirk.eddelbuettel.com/code/rcpp.html)。これは、Rでのベクトル化の一貫した使用や、さまざまな並列プログラミングフレームワーク、パッケージ、ライブラリを使用するなど、よりシンプルですが、多くの場合、かなり効果的なパフォーマンスへのアプローチに追加されます。 Rエコシステムの例については、参照してください CRANタスクビュー「Rによる高性能および並列コンピューティング」.

話す データサイエンス, 、私はそれが非常に理にかなっていると思います 再現可能な研究 さまざまなアプローチとさまざまな可用性 ツール, 、この概念をサポートしています(詳細については、参照してください 私の関連する答え)。私の答えが役立つことを願っています。

Rは、データサイエンティストにとって重要なツールの1つであり、使用を停止しないでください。

現在、C、C ++、さらにはJavaについて話しています。彼らは良い人気言語です。あなたがそれらを必要とするか、あなたが持っている仕事やプロジェクトの種類によって異なります。個人的な経験から、データサイエンティストのための非常に多くのツールがあり、常に学習する必要があると常に感じます。

PythonまたはMatlabを追加して、必要に応じて学習し、追加し続けることができます。学ぶための最良の方法は、あなたが満足していない他のツールを使用して作業プロジェクトを引き受けることです。もし私があなただったら、Cの前にPythonを学びます。それはCよりもコミュニティでより使用されています。しかし、Cはあなたの時間の無駄ではありません。

データサイエンティストとして、他の言語(C ++/Java)は、既存の生産エンジンに機械学習を組み込む必要がある場合に役立ちます。

ワッフル どちらも、適切にメンテナンスされたC ++クラスライブラリとコマンドライン分析パッケージです。監督された監視されていない学習、大量のデータ操作ツール、まばらなデータツール、およびオーディオ処理などのその他のものがあります。クラスライブラリでもあるため、必要に応じて拡張できます。あなたがC ++エンジンを開発している人ではない場合でも(あなたはそうでない可能性があります)、これにより、開発者に何かをプロトタイプ、テスト、および引き渡すことができます。

最も重要なことは、C ++とJavaの私の知識が、PythonとRがどのように機能するかを本当に理解するのに役立つと思います。どんな言語でも、その下で何が起こっているかについて少し理解した場合にのみ適切に使用されます。言語間の違いを学ぶことで、メイン言語の強みを活用することを学ぶことができます。

アップデート

大規模なデータセットを備えた商用アプリケーションの場合、Apache Spark -Mllibが重要です。ここでは、Scala、Java、またはPythonを使用できます。

あなたの目標が「しかし、高度な回帰、機械学習、テキストマイニング、その他のより高度な統計操作はどうですか」場合、私はあなたが別の言語を必要とする理由を理解することに熱心です(Pythonの形式は別です)。
そのようなことについては、Cは時間の無駄です。それは良いツールですが、Javaが出てから20年後には、CをCoded Coded Codedでめったにコーディングしませんでした。
Rのより機能的なプログラミングの側面を好む場合は、Cでコーディングする手続き上の悪い習慣になる前にScalaを学びます。
最後に、Hadley Wickhamのライブラリを使用することを学びます - データ操作を行う時間を大幅に節約できます。

ルートのような統計やデータサイエンスのためのいくつかのC ++ツールがあります https://root.cern.ch/drupal/ 、 バット https://www.mppmu.mpg.de/bat/ 、ブースト、またはopencv

まだ言及されているかどうかはわかりませんが、 Vowpal Wabbit しかし、それは特定の種類の問題のみに固有のものかもしれません。

を見てみましょう Intel Daal 進行中です。 Intel CPUアーキテクチャ用に高度に最適化されており、分散計算をサポートしています。

ビッグデータのためのスケーラブルな機械学習ソリューション:

以前のすべての投稿で対処されていないと思われる重要な領域があるため、$ .02を追加します - ビッグデータの機械学習!

ビッグデータの場合、スケーラビリティが重要であり、Rは不十分です。さらに、PythonやRのような言語は、通常他の言語で書かれているスケーラブルなソリューションとのインターフェースにのみ役立ちます。私はこの区別をしています。なぜなら、私はそれらを使用している人をdipparip辱したいからではなく、データサイエンスコミュニティのメンバーが真にスケーラブルな機械学習ソリューションがどのように見えるかを理解することが非常に重要なからです。

私はほとんどの仕事をしています 分散メモリクラスターに関するビッグデータ. 。つまり、16個のコアマシン(そのマザーボードのメモリを共有する単一のマザーボードに4個のクアッドコアプロセッサ)を使用するだけでなく、64個のコアマシンの小さなクラスターを使用します。これらの分散メモリクラスターは共有メモリ環境とは大きく異なり、ビッグデータの機械学習には、多くの場合、分散メモリ環境内でスケーラブルなソリューションが必要です。

また、独自のデータベース製品内のどこでもCおよびC ++を使用します。私たちの高レベルのものはすべてC ++とMPIで処理されますが、データに触れる低レベルのものはすべてロングとCスタイルの文字配列であり、製品を非常に高速に保つことです。 STD文字列の利便性は、単に計算コストの価値がありません。

分散型のスケーラブルな機械学習機能を提供するC ++ライブラリは多くありません - mlpack.

ただし、APIには他にもスケーラブルなソリューションがあります。

Apache Sparkには、スケーラブルな機械学習ライブラリがあります mlib とインターフェイスできること。

また Tensorflow 今持っています 分散したTensorflowC ++ API.

お役に立てれば!

ライセンス: CC-BY-SA帰属
所属していません datascience.stackexchange
scroll top