使用sklearn在文本文档的多标签分类中预测前三到四个标签。

3
我目前使用CountVectorizer从文本文档中提取特征,建立了一个分类器MultinomialNB(),虽然效果还不错,但我想用同样的方法来预测前三到四个标签,而不仅仅是排名第一的标签。
主要原因是数据输入不好,标签数量大约有90个,导致最高估计准确率只有35%。如果我能向用户推荐最有可能的三到四个标签,那么我就可以显著提高准确率。
有什么建议吗?任何指针都将不胜感激!
当前代码如下:
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
2个回答

1

要获取前N个标签,只需执行以下操作:

import numpy as np

n = 3
top_n_predictions = np.argsort(probas, axis=1)[:, -n:]

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接