3

私は現在、テキスト ドキュメントからの特徴抽出に使用する分類器MultinomialNB()をセットアップしてCountVectorizerいます。これは非常にうまく機能しますが、同じ方法を使用して、上位のラベルだけでなく上位の 3 ~ 4 ラベルを予測したいと考えています。

主な理由は、c.90 のラベルがあり、データ入力があまり良くないため、最高の見積もりの​​精度が 35% になることです。提案として最も可能性の高い上位 3 ~ 4 個のラベルをユーザーに提供できれば、精度範囲を大幅に増やすことができます。

助言がありますか?任意のポインタをいただければ幸いです!

現在のコードは次のようになります。

import numpy
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import Pipeline
from sklearn.cross_validation import KFold
from sklearn.metrics import confusion_matrix, accuracy_score

df = pd.read_csv("data/corpus.csv", sep=",", encoding="latin-1")

df = df.set_index('id')
df.columns = ['class', 'text']

data = df.reindex(numpy.random.permutation(df.index))

pipeline = Pipeline([
    ('count_vectorizer',   CountVectorizer(ngram_range=(1, 2))),
    ('classifier',         MultinomialNB())
])

k_fold = KFold(n=len(data), n_folds=6, shuffle=True)

for train_indices, test_indices in k_fold:
    train_text = data.iloc[train_indices]['text'].values
    train_y = data.iloc[train_indices]['class'].values.astype(str)

    test_text = data.iloc[test_indices]['text'].values
    test_y = data.iloc[test_indices]['class'].values.astype(str)

    pipeline.fit(train_text, train_y)
    predictions = pipeline.predict(test_text)
    confusion = confusion_matrix(test_y, predictions)

    accuracy = accuracy_score(test_y, predictions)
    print accuracy
4

2 に答える 2

1

予測が完了したら、次の方法で各ラベルの確率を取得できます。

labels_probability = pipeline.predict_proba(test_text)

各ラベルの確率を取得します。http://scikit-learn.org/stable/modules/generated/sklearn.pipeline.Pipeline.html#sklearn.pipeline.Pipeline.predict_probaを参照してください。

于 2016-08-04T16:19:13.993 に答える