C(またはC ++)のデータサイエンス


40

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

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

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

解決策はもちろん簡単です。プログラミングについて学びましょう。これは、いくつかのクラス(現在はCプログラミング)に登録することで行っていることです。

しかし、今私はアドレスの問題#1、#2上記に始めていることを、私は「自分自身を求めて左てるだけのような言語どのように生きているCC++、データ・サイエンスのため?」。

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

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

私はこれまでCで見つけた最高のリソースが呼び出されるライブラリであるシャーク与え、C/ C++サポートベクターマシン、線形回帰(ない非線形および多項プロビットのような他の先進回帰、など)、およびその他の最終候補リストを使用する能力を(素晴らしいが)統計関数。


5
この質問は主に意見に基づいているようです。言い換えることを検討してください。C / C ++で使用できるデータサイエンスツールの種類、またはこれらの言語を使用するアプリケーションの種類を尋ねてください。
シェルドンクレガー

1
私が求めているものです@sheldonkreger、私はより明確に、感謝作ってあげる
ハック-R

1
ワッフル(C ++)を使用して、機械学習を既存のC ++エンジンに組み込みました。
ピート

@Pete回答にそれを組み込むことができる場合、私はそれを解決策としてマークする可能性が高いでしょう
ハックR

1
メタツールキットはC ++で提供されています:meta-toolkit.github.io/meta。Courseraにはそれを使用するコースがありますが、まだ1週目ですので、ご覧ください。このコースは「テキスト検索と検索エンジン」と呼ばれます。
-LauriK

回答:


35

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

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

Rを超えたい場合は、Pythonを学ぶことをお勧めします。機械学習アルゴリズム用のscikit-learnやニューラルネットワークなどを構築するためのPyBrainなど、利用可能なライブラリが多数あります(また、プロットにはpylab / matplotlibを使用し、分析を開発するにはiPythonノートブックを使用します)。繰り返しになりますが、C / C ++は、タイムクリティカルなアルゴリズムをPython拡張機能として実装するのに役立ちます。


1
ありがとう、アンドレ。私はPybrainをよく使います。私にとってPythonはRとCの中間に位置しますが、コードの速度と幅広いアプリケーションの両方のためにCを学びたいと思っていました。これをソリューションとして選択したのは、C / C ++を使用してR拡張機能を作成することを考えていなかったからです。これは、私が絶対にやろうとしている素晴らしいアイデアです。ありがとう!!
ハック-R

1
次に、Pythonを学ぶという概念を説明します。私は大規模なデータセットと、Rを利用してそれらのデータセットを分析するデータ科学者と協力しています。私は幼い頃にCを学びましたが、Pythonはプログラマーとしての価値を本当に与えており、これらのデータサイエンティストを支援している1つの言語です。したがって、自分ではなく、チームを称賛してください。
グレンスワン

1
同様に、Pythonはcythonで書くことによって高速化されます(基本的にはC)。まだ自分で使ったことがないと言わざるを得ません 既存のライブラリを使用して実行できないことはほとんどありません(例:scikit-learn、pythonのパンダ[cythonで記述されているため、必要ありません!])。
seanv507

その他の便利なpythonライブラリには、パンダ、numpy、scipyなどがあります
。Pythonの

これはスポットです。CSのバックグラウンドがない場合、Pythonの基礎となる関数やRのパッケージよりも効率的にコードを記述する可能性は非常に低いことに注意してください。私は13年間C ++でプログラミングしましたが、メモリ管理とパフォーマンスの最適化にはまだうまくいかなかった側面があると思います。さらに、python&Rには配信の問題を最適化する非常に賢いコンピューター科学者がいるため、C言語は実際に非常に低遅延のシステムに追いやられます。
ジャガートナー

10

Andre Holznerが言ったように、RをC / C ++拡張で拡張することは、両方の長所を活用する非常に良い方法です。また、C ++で作業し、RInsideパッケージo Rを使用して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/


9

現在の傾向は、Python / Rを使用し、計算コストの高いタスクのためにC / C ++拡張機能にバインドすることです。

ただし、C / C ++にとどまる場合は、 Dlibをご覧ください

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

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


別の非常に有用な答え。その画像を自由に再現できるかどうかを知っていますか(プレゼンテーションやブログなどに掲載したい場合)。また、「> 20kサンプル」のようなことを言っているとき、それは本当に「サンプル」または「サンプルの観測」を意味するのだろうか?
ハックR

2
私はdlibの作者です。好きな場所にその画像を投稿してください:)。また、20kを超えるサンプルは、20kのベクターなどがあることを意味します。各サンプルに含まれる変数の数は別の問題です。
デイビスキング

@ Hack-R「サンプル」は、統計/機械学習でのオーバーロードされた用語の1つであり、母集団から抽出されたインスタンスのセット(「サンプルサイズ」、「サンプル平均」など)を意味する場合があります。個々のインスタンスを意味します(「10Kサンプルで分類器をトレーニングした」など)。
ティムグッドマン

6

私の意見では、理想的には、よりバランスのとれた専門家になるために、最も一般的なプログラミングパラダイム手続き型オブジェクト指向関数型)の少なくとも 1つのプログラミング言語を知っているとよいでしょう。確かに、RPythonは、データサイエンスのための最も一般的な2つのプログラミング言語と環境であり、したがって、プライマリデータサイエンスツールであると考えています。

ジュリアはある面では印象的ですが、これら2つに追いつき、主要なデータサイエンスツールとしての地位を確立しようとしています。ただし、R / Python人気、非常に大きなコミュニティ、既存および新規に開発されたパッケージ/ライブラリの巨大なエコシステムにより、非常に広範囲のドメイン/フィールドをカバーしているため、これはすぐには起こりません調査。

とはいえ、データサイエンス、ML、AI分野に焦点を当てた多くのパッケージとライブラリは、RまたはPython以外の言語で実装および/またはAPIを提供します(証拠については、このキュレーションリストこのキュレーションリストを参照してください。優れており、フィールドの多様性について堅実な視点を提供します)。これは、特にパフォーマンス指向または専用のソフトウェアに当てはまります。そのソフトウェアについては、主にJava、C、C ++で実装やAPIを使用するプロジェクトを見てきました(Javaは、Hadoopとそのエコシステムに近いため、データサイエンスのビッグデータセグメントで特に人気があり、NLPではセグメント)、しかし、はるかに限られた、ドメインベースの範囲ではあるが、他のオプションが利用可能です。これらの言語はどちらも時間の無駄ではありませんが、現在の仕事の状況、プロジェクト、興味に合わせてそれらの一部またはすべてをマスターすることを優先する必要があります。したがって、C / C ++(およびJava)の実行可能性に関する質問に答えるために、これらはすべて実行可能ですがプライマリデータサイエンスツールとしてではなく、セカンダリツールとして実行可能です。

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

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


5

Rは、データサイエンティストにとって重要なツールの1つであり、使用をやめることはありません。

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

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


圧倒的な数のツールについてあなたが何を言っているか知っています!私はインターンに気を散らさないように、そしてたった1つか2つのことに集中するように言いますが、私自身のアドバイスを取るのは難しいです。
ハックR

5

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

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

最も重要なことは、C ++とJavaに関する私の知識が、PythonとRの仕組みを理解するのに本当に役立つと信じていることです。どの言語が適切に使用されるかは、その下で何が起こっているかについて少し理解している場合に限られます。言語間の違いを学習することにより、メイン言語の長所を活用することを学ぶことができます。

更新

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


2

目標が「しかし、高度な回帰、機械学習、テキストマイニング、その他のより高度な統計演算についてはどうなのか」という理由で、別の言語(Python以外)が必要になる理由を理解したいと思います。
そのようなことについては、Cは時間の無駄です。それは持っている良いツールだが、Javaが出てきたので、〜20年の間に、私はめったにCをコード化されていないてきた
あなたがRのより機能的なプログラミング側を好む場合は、Cでコーディングあまりにも多くの手続きの悪い習慣に入る前に、スカラ座を学びます。
最後に、Hadley Wickhamのライブラリの使用方法を学びます-データ操作の時間を大幅に節約できます。


RやPythonのような言語はCのような言語に比べて非常に遅い/非効率的です。したがって、大量のデータや計算を扱うとき、Cで何かを行うことができれば、Rで行うよりも速くなります。ハドレーのパッケージカントー!
ハックR


1

まだ言及されているかどうかはわかりませんが、vowpal wabbitもありますが、特定の種類の問題のみに固有のものである可能性があります。


1
面白そうです。私はリンクを見ただけですが、言及されたモデルのタイプは非常に有用です。ただし、プログラムで使用できる通常のCライブラリですか?さらに調査する必要があります。
ハック-R

0

進行中のIntel DAALご覧ください。Intel CPUアーキテクチャ向けに高度に最適化されており、分散計算をサポートしています。


0

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

以前の投稿のすべてで対処されていないように見える重要な領域があるため、$。02を追加します- ビッグデータの機械学習

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

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

また、独自のデータベース製品内のすべての場所でCおよびC ++を使用しています。私たちの高レベルなものはすべてC ++とMPIで処理されますが、データに触れる低レベルなものはすべて、製品を非常に高速に保つためにすべて長いCスタイルの文字配列です。std文字列の利便性は、計算コストに見合うだけのものではありません。

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

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

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

またTensorflow今いるtensorflowを分散して持つC ++ APIを

お役に立てれば!

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