13

この問題について、過去 2 ~ 3 週間、頭を悩ませてきました。各サンプルが複数のラベルに属する可能性があるマルチラベル (マルチクラスではない) の問題があります。

トレーニング データとして約 450 万のテキスト ドキュメント、テスト データとして約 100 万のテキスト ドキュメントがあります。ラベルは約 35K です。

私はscikit-learnを使用しています。特徴抽出のために、以前はまったくスケーリングしない TfidfVectorizer を使用していましたが、現在は HashVectorizer を使用しています。これはより優れていますが、ドキュメントの数を考えるとそれほどスケーラブルではありません。

vect = HashingVectorizer(strip_accents='ascii', analyzer='word', stop_words='english', n_features=(2 ** 10))

SKlearn は、任意の推定器をフィードできる OneVsRestClassifier を提供します。マルチラベルの場合、LinearSVC と SGDClassifier のみが正しく機能していることがわかりました。私のベンチマークによると、SGD はメモリと時間の両方で LinearSVC より優れています。だから、私はこのようなものを持っています

clf = OneVsRestClassifier(SGDClassifier(loss='log', penalty='l2', n_jobs=-1), n_jobs=-1)

しかし、これにはいくつかの深刻な問題があります。

  1. OneVsRest には、コア外学習を不可能にする partial_fit メソッドがありません。そのための代替手段はありますか?
  2. HashingVectorizer/Tfidf はどちらも単一のコアで動作し、n_jobs パラメーターはありません。ドキュメントのハッシュ化に時間がかかりすぎています。代替案/提案はありますか?また、n_features の値は正しいですか?
  3. 100 万のドキュメントでテストしました。ハッシュには 15 分かかり、clf.fit(X, y) になると、OvR が内部で LabelBinarizer を使用し、次元 (yx クラス) のマトリックスを割り当てようとするため、MemoryError を受け取りますが、これはかなり割り当てが不可能です。私は何をすべきか?
  4. 信頼性が高くスケーラブルなマルチラベル アルゴリズムを備えた他のライブラリはありますか? Genism と mahout は知っていますが、両方ともマルチラベルの状況に対応するものはありませんか?
4

4 に答える 4

8

マルチラベルの部分は手作業で行います。とにかく、OneVsRestClassifier はそれらを独立した問題として扱います。n_labels 個の分類子を作成し、それらに対して partial_fit を呼び出すだけです。ただし、一度だけハッシュしたい場合はパイプラインを使用できません (これをお勧めします)。ハッシュベクトライザーの高速化についてはわかりません。@Larsmans と @ogrisel に聞いてみてください ;)

OneVsRestClassifierpartial_fitを使用することは素晴らしい追加であり、実際には特に問題はありません。また、それを自分で実装して PR を送信することもできます。

于 2013-09-08T15:02:10.377 に答える
0

The partial_fit() method was recently added to sklearn so hopefully it should be available in the upcoming release (it's in the master branch already).

The size of your problem makes it attractive to tackling it with neural networks. Have a look at magpie, it should give much better results than linear classifiers.

于 2016-08-31T12:07:17.760 に答える