Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python sklearn-从文本文档预测多标签分类中的前3-4个标签_Python_Scikit Learn_Classification_Text Classification_Multilabel Classification - Fatal编程技术网

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

Python sklearn-从文本文档预测多标签分类中的前3-4个标签,python,scikit-learn,classification,text-classification,multilabel-classification,Python,Scikit Learn,Classification,Text Classification,Multilabel Classification,我目前有一个分类器MultinomialNB()使用CountVectorizer设置,用于从文本文档中提取特征,虽然这非常有效,但我希望使用相同的方法来预测前3-4个标签,而不仅仅是前一个 主要原因是有c.90标签,数据输入不是很好,导致最高估计的准确率为35%。如果我可以向用户提供最有可能的3-4个标签作为建议,那么我可以显著提高准确率 有什么建议吗?任何提示都将不胜感激 当前代码如下所示: import numpy import pandas as pd from sklearn.feat

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

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

labels_probability = pipeline.predict_proba(test_text)

您将获得每个标签的概率。请参见

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

import numpy as np

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