質問

私には約300k文書に保存されPostgresデータベースのタグ付けのテーマやカテゴリー(約150分類しています。いつも150k書いています。んのprogrammaticlyに分類します。

手作りア NLTK そのナイーブベイズ分級機です。そうではないかだを提案することができ、よりよい分類アルゴリズムをこのようなことが、私の全ての耳).

私の問題はないのに十分なRAMのNaiveBayesClassifierすべての150categoies/300k書類を一時的に訓練を5つのカテゴリを使用8GB).さらに、精度の冠のように落としている区分(90%の精度で2カテゴリ81%5,61%10).

べきかに鉄分級機と5種類、および経営者にとっては150k文書の類別詞がきていることを確認して下さいがマッチ?どうやら、こう、あるいは多くの誤検知が書い合わせの種類取得靴-角による分級機での最適なマッチングをご用意---があるので、いいのはな"オプションの分類器の場合の文書なの。

この試験クラス http://gist.github.com/451880

役に立ちましたか?

解決

まず切り替えの書類 TF-log(1+IDF)ベクター:期周波数には疎いものを使用できるpythonの辞としてキーとしてカウント値として割の総数を取得し、グローバル周波数です。

少し値段が高くなりますが、利用のabs(ハッシュ期))のインスタンスとして正の整数鍵となります。その使用scipy.疎ベクトルをより便利に、効率的な行線形代数作りをpython辞書名またを設定した

または150周波数ベクトルによる平均周波数のすべての標識した書類に属するすことができます。そのために新たに書き計算の コサイン類似度 との間での文書ベクターおよび各カテゴリーのベクトルとの類似のカテゴリーとしてラベルをお書きします。

ここでは不十分で、実際に試したほうがよいでしょう列車、ロジスティック回帰モデルを用L1刑に説明している この例では、scikit-learn (このラッパーのためのliblinearとして説明@ephes).のベクトル列車に使用され豊ロジスティック回帰モデルは先に述べたTD-log(1+IDF)ベクトルとても良い性能(精度リコのscikit学libには、sklearn.メトリクスモジュールをルーチンの計算方が得点が与えられたモデルされたデータセットである。

大きなデータセット:実際に試したほうがよいでしょう、 vowpal wabbit することで、最速のうさぎが地球上の大規模文書の分類問題ではない使いやすいのpythonラッパー AFAIK).

他のヒント

あなたの文書はどれくらいの大きさ(単語数)ですか? 150KトレーニングDOCでのメモリ消費は問題ではないはずです。

ナイーブベイズは、特にトレーニングの例がいくつかあるか、非常にノイズの多いトレーニングダタを備えた多くのカテゴリがある場合に適しています。しかし、一般に、線形サポートベクターマシンははるかに優れています。

問題のマルチクラス(ドキュメントは1つのカテゴリのみに属する)またはマルチラベル(ドキュメントは1つ以上のカテゴリに属します)ですか?

正確性は、分類器のパフォーマンスを判断するための選択肢がありません。むしろ、精密vsリコール、精密リコール損益分岐点(PRBP)、F1、AUCを使用する必要があります。リコール(x)が信頼度の値の値に基づいて精度(y)に対してプロットされる精度vsリコール曲線を調べる必要があります(ドキュメントがカテゴリに属しているかどうかにかかわらず)。通常、カテゴリごとに1つのバイナリ分類子を構築します(1つのカテゴリの肯定的なトレーニング例と、現在のカテゴリに属さない他のすべてのトレーニングエクサムを作成します)。カテゴリごとに最適な信頼性のしきい値を選択する必要があります。カテゴリごとの単一の測定値をグローバルパフォーマンス測定に組み合わせる場合は、マイクロ(すべての真の肯定、偽陽性、偽陰性、真のネガティブ、および計算スコアをまとめる)またはマクロ(カテゴリあたりの計算スコアとマクロを組み合わせる必要があります。次に、すべてのカテゴリにわたってこれらのスコアを平均します)平均。

数千万のドキュメント、数百万のトレーニング例、数千のカテゴリ(マルチラベル)のコーパスがあります。深刻なトレーニング時間の問題に直面しているため(ドキュメントの数は新しい、更新、または削除されたドキュメントの数が非常に高いため、変更されたバージョンを使用します liblinear. 。しかし、liblinear周辺のPythonラッパーの1つを使用した小さな問題の場合(liblinear2scipy また Scikit-Learn)正常に動作するはずです。

ドキュメントがカテゴリのいずれかに収まらない場合に備えて、分類器に「上記のいずれもない」オプションを持つ方法はありますか?

毎回「上記のいずれでもない」擬似カテゴリを訓練するだけで、この効果を得ることができます。あなたがトレーニングできる最大が5つのカテゴリである場合(なぜそれが非常に多くのRAMを食べているのかわかりませんが)、それぞれ実際の2Kドキュメントから4つの実際のカテゴリを訓練し、2Kドキュメントを持つ「上記のいずれでもない」他のすべての146カテゴリからランダムに取得されます(「層状のサンプリング」アプローチが必要な場合は、それぞれから約13〜14です。

それでも少しクラッジのように感じられ、あなたは完全に異なるアプローチでより良いかもしれません - あなたの300Kの事前にタグ付きのドキュメントを150の合理的に分離可能なクラスターに定義する多次元のドキュメント測定を見つけてから、まだそれぞれを割り当てるだけですこのように決定されたように、ドキュメントを適切なクラスターに獲得しました。 NLTKにはこの種のことをサポートするために直接利用できるものは何もないと思いますが、NLTKは非常に速く成長しているので、私は何かを見逃したかもしれません... ;-)

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