sklearn - 从文本文档中预测多标签分类中的前 3-4 个标签

Posted

技术标签:

【中文标题】sklearn - 从文本文档中预测多标签分类中的前 3-4 个标签【英文标题】:sklearn - predict top 3-4 labels in multi-label classifications from text documents 【发布时间】:2016-12-10 19:42:26 【问题描述】:

我目前有一个分类器 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

【问题讨论】:

【参考方案1】:

完成预测后,您可以通过以下方式获得每个标签的概率:

labels_probability = pipeline.predict_proba(test_text)

您将获得每个标签的概率。见http://scikit-learn.org/stable/modules/generated/sklearn.pipeline.Pipeline.html#sklearn.pipeline.Pipeline.predict_proba

【讨论】:

【参考方案2】:

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

import numpy as np

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

【讨论】:

以上是关于sklearn - 从文本文档中预测多标签分类中的前 3-4 个标签的主要内容,如果未能解决你的问题,请参考以下文章

使用 Java + 正则表达式从文本文档中提取 URL

使用 Sklearn 进行多标签文本分类

使用 Sklearn 进行多标签分类

如何为多标签分类器/一对休息分类器腌制 sklearn 管道?

KNN sklearn 中的分类标签

使用 sklearn tf-idf 查找矢量化文本文档中的簇数