[解決済み] scikit-learnを使って複数のカテゴリに分類する
質問
scikit-learnの教師あり学習を使って、テキストの断片を1つ以上のカテゴリに分類しようとしています。私が試したすべてのアルゴリズムの予測関数は、1つのマッチを返すだけです。
たとえば、私はテキストの一部を持っています。
"Theaters in New York compared to those in London"
そして、私はアルゴリズムを訓練して、私が与えるすべてのテキストスニペットの場所を選ぶようにしました。
上記の例では、私はこのアルゴリズムが
New York
と
London
を返しますが
New York
.
scikit-learnを使って複数の結果を返すことは可能でしょうか?あるいは、次に高い確率のラベルを返すことも可能ですか?
ご協力ありがとうございます。
---更新情報
を使ってみました。
OneVsRestClassifier
を使ってみましたが、やはり1つのテキストに対して1つのオプションしか返ってきません。以下は、私が使用しているサンプルコードです。
y_train = ('New York','London')
train_set = ("new york nyc big apple", "london uk great britain")
vocab = {'new york' :0,'nyc':1,'big apple':2,'london' : 3, 'uk': 4, 'great britain' : 5}
count = CountVectorizer(analyzer=WordNGramAnalyzer(min_n=1, max_n=2),vocabulary=vocab)
test_set = ('nice day in nyc','london town','hello welcome to the big apple. enjoy it here and london too')
X_vectorized = count.transform(train_set).todense()
smatrix2 = count.transform(test_set).todense()
base_clf = MultinomialNB(alpha=1)
clf = OneVsRestClassifier(base_clf).fit(X_vectorized, y_train)
Y_pred = clf.predict(smatrix2)
print Y_pred
結果 ['ニューヨーク' 'ロンドン' ]です。
どのように解決するのですか?
あなたが欲しいのは、マルチラベル分類と呼ばれるものです。Scikits-learnはそれができる。こちらを参照してください。 http://scikit-learn.org/dev/modules/multiclass.html .
私のバージョンのsklearnはWordNGramAnalyzerを持っていないようなので、この例で何が間違っているのかわかりません。おそらく、より多くの学習例を使用するか、別の分類器を試してみるか、ということでしょうか。しかし、マルチラベル分類器は、ターゲットがラベルのタプル/リストのリストであることを期待することに注意してください。
以下は私のために動作します。
import numpy as np
from sklearn.pipeline import Pipeline
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.svm import LinearSVC
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.multiclass import OneVsRestClassifier
X_train = np.array(["new york is a hell of a town",
"new york was originally dutch",
"the big apple is great",
"new york is also called the big apple",
"nyc is nice",
"people abbreviate new york city as nyc",
"the capital of great britain is london",
"london is in the uk",
"london is in england",
"london is in great britain",
"it rains a lot in london",
"london hosts the british museum",
"new york is great and so is london",
"i like london better than new york"])
y_train = [[0],[0],[0],[0],[0],[0],[1],[1],[1],[1],[1],[1],[0,1],[0,1]]
X_test = np.array(['nice day in nyc',
'welcome to london',
'hello welcome to new york. enjoy it here and london too'])
target_names = ['New York', 'London']
classifier = Pipeline([
('vectorizer', CountVectorizer(min_n=1,max_n=2)),
('tfidf', TfidfTransformer()),
('clf', OneVsRestClassifier(LinearSVC()))])
classifier.fit(X_train, y_train)
predicted = classifier.predict(X_test)
for item, labels in zip(X_test, predicted):
print '%s => %s' % (item, ', '.join(target_names[x] for x in labels))
私の場合、これは出力を生成します。
nice day in nyc => New York
welcome to london => London
hello welcome to new york. enjoy it here and london too => New York, London
これが役立つといいのですが。
関連
-
[解決済み] マルチプロセシングpool.mapを複数の引数で使用する方法
-
[解決済み] Scikit learnのランダムステート(疑似乱数)
-
[解決済み] 文字列を複数の単語境界のデリミタで単語に分割する
-
[解決済み】scikit-learnで分類器をディスクに保存する。
-
[解決済み] scikit-learnのclass_weightパラメータはどのように機能するのでしょうか?
-
[解決済み] Pythonのキャッシュライブラリはありますか?
-
[解決済み] Djangoで2つの日付の間を選択する
-
[解決済み] Pythonで0xを使わずにhex()を使うには?
-
[解決済み] Celeryタスクのユニットテストはどのように行うのですか?
-
[解決済み] scikit-learn .predict() デフォルトの閾値
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] SQLAlchemy: セッションの作成と再利用
-
[解決済み] django.db.migrations.exceptions.InconsistentMigrationHistory
-
[解決済み] ファブリック経由でデプロイユーザとしてvirtualenvを有効化する
-
[解決済み] Pythonで0xを使わずにhex()を使うには?
-
[解決済み] 範囲指定された浮動小数点数のランダムな配列を生成します。
-
[解決済み] Python Logging でログメッセージが2回表示される件
-
[解決済み] Python Empty Generator 関数
-
[解決済み] Pythonで、ウェブサイトが404か200かを確認するためにurllibをどのように使用しますか?
-
[解決済み] pycharmがタブをスペースに自動変換する
-
[解決済み] 新しいpip backtrackingの実行時問題の解決