from sklearn.feature_extraction.text import TfidfVectorizer
import numpy as np
from sklearn import linear_model
arr=['dogs cats lions','apple pineapple orange','water fire earth air', 'sodium potassium calcium']
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(arr)
feature_names = vectorizer.get_feature_names()
Y = ['animals', 'fruits', 'elements','chemicals']
T=["eating apple roasted in fire and enjoying fresh air"]
test = vectorizer.transform(T)
clf = linear_model.SGDClassifier(loss='log')
clf.fit(X,Y)
x=clf.predict(test)
#prints: elements

在上面的代码中,clf.predict()只打印列表x中一个样本的1个最佳预测。
我对列表X中特定样本的前3个预测很感兴趣,我知道函数predict_proba/predict_log_proba返回列表Y中每个功能的所有概率列表,但在获得前3个结果之前,它必须排序,然后与列表Y中的功能关联。
有什么直接有效的方法吗?

最佳答案

没有内置功能,但有什么问题

probs = clf.predict_proba(test)
best_n = np.argsort(probs, axis=1)[-n:]


正如其中一条评论所建议的,应该将[-n:]改为[:,-n:]
probs = clf.predict_proba(test)
best_n = np.argsort(probs, axis=1)[:,-n:]

08-24 23:44