【发布时间】:2019-03-12 22:06:04
【问题描述】:
我尝试使用 scikit 的 SGDClassifier 设置一个简单的文本分类任务,并尝试获取前 N 个预测,包括它们的概率。作为样本训练数据,我有三个类
- 苹果
- 柠檬
- 橙子
每个类一个文档:
- 在苹果中:“苹果和柠檬”
- 在柠檬中:“柠檬和橙子”
- 在橙子中:“橙子和苹果”
我现在想预测三个测试文档“apple”、“lemon”和“orange”,并希望获得每个文档的 Top-2-Predictions,包括它们的概率。到目前为止,我的代码如下所示:
from sklearn.linear_model import SGDClassifier
from sklearn.datasets import load_files
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.pipeline import Pipeline
import numpy as np
train = load_files('data/test/')
text_clf_svm = Pipeline([('vect', CountVectorizer()), ('tfidf', TfidfTransformer()),
('clf-svm', SGDClassifier(loss='modified_huber', penalty='l2',alpha=1e-3, n_iter=5, random_state=42))])
text_clf_svm = text_clf_svm.fit(train.data, train.target)
docs=['apple', 'orange', 'lemon']
predicted = text_clf_svm.predict(docs)
#Perform a Top 1 prediction
for doc, category in zip(docs, predicted):
print('%r => %s' % (doc, train.target_names[category]))
# Perform a top 2 prediction
print(np.argsort(text_clf_svm.predict_proba(docs), axis=1)[-2:])
我的输出如下:
'apple' => apples
'orange' => lemons
'lemon' => lemons
[[1 2 0]
[0 1 2]]
我现在难以解释数据。我真正想摆脱的是:
'apple' => apples (0.54...), lemons (0.43...)
'orange' => apples (0.48...), oranges (0.43...)
'lemon' => lemons (0.48...), oranges (0.43...)
有人能告诉我怎么做吗?提前感谢您的帮助!
【问题讨论】:
标签: python scikit-learn multilabel-classification