首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何利用sklearn的SGDClassifier获得前3位或前N位的预测

如何利用sklearn的SGDClassifier获得前3位或前N位的预测
EN

Stack Overflow用户
提问于 2015-09-08 15:05:55
回答 6查看 18.6K关注 0票数 17
代码语言:javascript
复制
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中的一个样本打印了一个最佳预测。我对predict_proba/predict_log_proba列表中某个特定样本的3预测感兴趣,我知道函数返回列表Y中每个功能的所有概率列表,但在获得前3项结果之前,它必须排序并与列表Y中的特性关联。有什么直接有效的方法吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-09-10 00:20:16

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

代码语言:javascript
复制
probs = clf.predict_proba(test)
best_n = np.argsort(probs, axis=1)[-n:]

正如其中一条注释所建议的,应该将[-n:]更改为[:,-n:]

代码语言:javascript
复制
probs = clf.predict_proba(test)
best_n = np.argsort(probs, axis=1)[:,-n:]
票数 19
EN

Stack Overflow用户

发布于 2018-02-01 21:31:00

我知道这是answered...but,我可以多加一点.

代码语言:javascript
复制
#both preds and truths are same shape m by n (m is number of predictions and n is number of classes)
def top_n_accuracy(preds, truths, n):
    best_n = np.argsort(preds, axis=1)[:,-n:]
    ts = np.argmax(truths, axis=1)
    successes = 0
    for i in range(ts.shape[0]):
      if ts[i] in best_n[i,:]:
        successes += 1
    return float(successes)/ts.shape[0]

它又快又脏,但我觉得它很有用。我们可以添加自己的错误检查,等等。

票数 11
EN

Stack Overflow用户

发布于 2017-08-09 19:05:31

希望Andreas能在这方面有所帮助。当丢失=‘铰链’时,predict_probs不可用。当损失=‘铰链’时,要获得最高的n级:

代码语言:javascript
复制
calibrated_clf = CalibratedClassifierCV(clfSDG, cv=3, method='sigmoid')
model = calibrated_clf.fit(train.data, train.label)

probs = model.predict_proba(test_data)
sorted( zip( calibrated_clf.classes_, probs[0] ), key=lambda x:x[1] )[-n:]

不确定clfSDG.predict和calibrated_clf.predict是否总是预测同一个类。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32461246

复制
相关文章

相似问题

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