首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从文本文档中预测多标签分类中的前3-4标签

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

Stack Overflow用户
提问于 2016-08-04 15:25:26
回答 2查看 2.3K关注 0票数 3

我目前已经建立了一个分类器MultinomialNB(),它使用CountVectorizer从文本文档中提取特征,虽然这很好,但是我想使用相同的方法来预测前3-4个标签,而不仅仅是最上面的标签。

主要原因是有c.90标签和数据输入不是很好,导致35%的准确性最高估计。如果我可以向用户提供最有可能的3-4标签作为建议,那么我可以大大提高准确性覆盖范围。

有什么建议吗?任何指点都将不胜感激!

当前代码如下所示:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-04 16:19:13

一旦完成了预测,您就可以通过以下方法获得每个标签的概率:

代码语言:javascript
复制
labels_probability = pipeline.predict_proba(test_text)

你将得到每个标签的概率。请参阅proba

票数 1
EN

Stack Overflow用户

发布于 2018-08-03 08:32:31

要抓住上面的N个标签,只需做:

代码语言:javascript
复制
import numpy as np

n = 3
top_n_predictions = np.argsort(probas, axis=1)[:, -n:]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38771478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档