Pythonを使用した機械学習


53

機械学習の実験にPythonライブラリを使用することを検討しています。これまで、私はWEKAに頼っていましたが、全体的にはかなり不満でした。これは主に、WEKAがあまりサポートされていないことを発見し(ごく少数の例、ドキュメントがまばらで、コミュニティのサポートが私の経験では望ましいものではない)、助けが得られずにスティッキーな状況にいることに気付いたからです。私がこの動きを検討しているもう1つの理由は、私はPythonが本当に好きで(Pythonが初めて)、Javaのコーディングに戻りたくないからです。

だから私の質問は、何がもっと

  1. 包括的
  2. スケーラブル(10万の機能、1万の例)および
  3. PythonでMLを実行するためのライブラリをサポートしていますか?

テキスト分類を行うことに特に興味があるので、分類子、特徴選択方法(情報ゲイン、カイ二乗など)の優れたコレクション、およびテキスト前処理機能(ステミング、ストップワード削除)を備えたライブラリを使用したいと思います。 、tf-idfなど)。

ここや他の場所での過去の電子メールスレッドに基づいて、これまでPyML、scikits-learn、Orangeを見てきました。私が言及した上記の3つの指標に関して、人々の経験はどうでしたか?

他の提案はありますか?


ご意見ありがとうございました。とりあえず、NLTK + scikit-learnを使って、どこに行くか見てみようと思います。
アンディ

1
私はあなたにRを見ることを提案することはできません.Rにははるかに大きなMLライブラリがあり、(この仕事のために特に作られている)はるかに均質な環境を提供します。Rのテキストマイニングパッケージをここに示します

はい
アンディ

1
PythonとRの両方を使用できます。1つのオプションは、データ処理ステップ間で結果を保持するために、データベースのような言語に依存しないストレージ方法を使用することです
ファヒムミタ

あなたはPythonコードからウェカを使用することができます。dimitri-christodoulou.blogspot.com/2012/03/...

回答:


40

scikit-learnオプションについて:100k(スパース)機能と10kサンプルはメモリに収まるほど十分に小さいため、scikit-learn(20ニュースグループデータセットと同じサイズ)で完全に実行できます。

これはPyCon 2011で演習とソリューションを使用したテキスト分類の章を付けたチュートリアルです。

また、PyCon FRで提供したバージョンの更新バージョンであるトピックに関する講演も行いました。スライド(およびコメント内の埋め込みビデオ)は次のとおりです。

機能の選択については、すべての例がscikit-learnドキュメントに基づいているquoraのこの回答をご覧ください。

scikit-learnにはコロケーション特徴抽出がまだありません。これを行うには、nltkおよびnltk-trainerを使用します。


ありがとう。これは特に前向きな方法のようです。やってみます。
アンディ

@ogrisel、最初の3つのリンクで一部のリンクが腐敗しています(リンク4のビデオも欠落しています)。新しいScikitドメインscikit-learn.org
xtian 14

14

テキストの操作に関しては、NLTKをご覧ください。非常に、非常によくサポートされ、文書化されており(オンラインの本や、必要に応じて紙の本もあります)、必要な前処理を行います。Gensimも便利だと思うかもしれません。重点はベクトル空間モデリングであり、LSIとLDA(pLSIも私が思う)のスケーラブルな実装があります。また、tf-idfによる選択も行います-NLTKが行うかどうかはわかりません。私はこれらの断片を50kのコーパスでそれほど困難なく使用しました。

NLTK:http ://www.nltk.org/

Gensim:http ://nlp.fi.muni.cz/projekty/gensim/

残念ながら、あなたの質問の主な目的については、あなたが参照する特定のライブラリに精通していません(scikits-learnを少し使用したことがありますが)。


3
NLTKの場合は+1。機械学習の研究と自然言語処理を行っているOlivier Griselには、Webについての優れたチュートリアルとスライドがあります。たとえば、NLTKとscikit-learn(PyCON FR 2010)による統計学習とテキスト分類を考えることができます。
chl

@chiそのチュートリアルをありがとう、私は少しいじってみましたが、彼はそこにたくさんの素晴らしい資料を持っているようです。また、彼のスライドにヒートマップを含む混同マトリックスを表示します;)
JMS

9

PythonにはさまざまなMLライブラリがあります(mloss.orgもチェックしてください)。しかし、私は常に、ml実践者よりもml研究者に役立つと感じています。

Numpy / SciPyおよびmatplotlibは、Pythonを使用した科学研究のための優れたツールです。ほとんどの数式を自分でハッキングすることを恐れないのであれば、失望することはありません。また、cudamatまたはgnumpyで GPUを使用するのは非常に簡単です。これまで数日かかっていた実験が数時間または数分で完了するようになりました。

ブロックの最新の子供はたぶんTheanoです。これは、最適化、GPUの実装、および勾配ベースのメソッドにとっては驚くほど優れた自動機能を備えた数学表現のシンボリック言語です。

また、私が知る限り、JMSで言及されているNLTKは、基本的にはオープンソースの自然言語ライブラリのナンバーワンです。

Pythonは機械学習に適したツールです。


8

オレンジを提案させてください

包括的

はい

スケーラブル(10万の機能、1万の例)

はい

PythonでMLを実行するためのライブラリをサポートしていますか?

はい

分類器、特徴選択方法(情報ゲイン、カイ二乗など)の優れたコレクションを備えたライブラリ、

これらはすべて、オレンジですぐに使用できます

テキストの前処理機能(ステミング、ストップワードの削除、tf-idfなど)。

テキスト処理にオレンジを使ったことはありませんが、


オレンジの場合は+1。すぐに使いこなす方法を示す優れたドキュメントがあり、ビジュアルプログラミングGUIを使用するか、Pythonからライブラリを呼び出すことができます。
ジョシュヘマン

4

これが特に役立つかどうかはわかりませんが、オンラインで利用できるPythonの統計を学ぶためのプログラマー向けのガイドがあります。http://www.greenteapress.com/thinkstats/

私の短いスキャンからはかなり良いようで、いくつかの機械学習方法について話しているように見えるので、始めるのに良い場所かもしれません。


3

libsvmを確認してください。


4
libsvmは、多数の機能やサンプルにうまく対応できません。同じ著者によるliblinearの使用が適切です。通常、線形モデルは高次元空間で十分です。
ogrisel

libsvmはscikits-learnとOrangeの両方のsvmエンジンではありませんか?または、線形の場合、それらは本当にliblinearにフォールバックしますか?
ジョンロバートソン

3

SHOGUN(将軍)は大規模な機械学習ツールボックスであり、有望なようです。



1

@ogriselが強調したように、scikit-learnはPython用の最高の機械学習パッケージの1つです。これは、100k(スパース)フィーチャと10kサンプルのような小さなデータセットに適しています。基本的に、メモリに収まるデータセット。

ただし、拡張性の高いPython Machine Learningフレームワークを探している場合は、Pyspark MLlibを強くお勧めします。最近のデータセットは指数関数的に大きくなる可能性があるため(ビッグデータとディープラーニングの波が与えられると)、多くの場合、モデルトレーニングフェーズだけでなく、フィーチャエンジニアリングフェーズ(機能変換) 、機能の選択)。興味のあるSpark Mllibプラットフォームの3つのメトリックをすべて見てみましょう。

  1. スケーラビリティ: データセットがメモリに収まる場合は、scikit-learnを選択する必要があります。大きすぎてメモリに収まらない場合は、Sparkが最適です。ここで注意すべき重要なことは、Sparkが分散設定でのみより速く動作することです。

  2. 包括性: Sklearnは、spark mllibと比較して、一般的に使用される多数のアルゴリズムの適切な実装という点ではるかに豊富です。データ操作および変換のサポートは、scikit-learnでより豊富です。Spark Mllibには十分なデータ変換モジュールがあり、ほとんどの場合にうまく機能します。そのため、拡張性の問題のためにスパークmllibを使用することになった場合でも、作業を完了することができます。相関分析、特徴抽出(tf-idf、word2vec、CountVectorizer)、特徴変換(Tokenizer、StopWordsRemover、nn-gram、Binarizer、PCAなど)をすべてサポートしています。詳細なリストについては、以下のリンクをご覧ください:

Spark mllibの機能の抽出、変換、および選択

  1. 分類: Spark mllibには、ほとんどの場合に使用する主要なアルゴリズムの実装がすべて含まれています(テキスト分類に適したアルゴリズムを含む)。mllibで使用できるアルゴリズムの詳細な概要については、以下のリンクを参照してください。

MLLIBの分類と回帰

ボーナス: Apache Sparkは、Python、R、Java、およびScalaをサポートしています。したがって、明日(個人的な選択として、または職業上の理由で)別の言語を試してみることにした場合、まったく新しいフレームワークを学ぶ必要はありません。


0

あなたがまだアドバイスを探しているかどうかはわかりません(この質問は5か月前に作成しました...)。私はこの本を始めたばかりで、これまでのところかなりうまくいっています:

https://www.amazon.com.mx/dp/1491962291/ref=cm_cr_ryp_prd_ttl_sol_3

著者はコード、例を示し、MLアルゴリズムの「舞台裏」での理論と数学について説明します。これは非常に有益だと思います。これがあなたにとっても同じことを願っています。

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