如何获得分类器对sklearn中预测的置信度分数?
Posted
技术标签:
【中文标题】如何获得分类器对sklearn中预测的置信度分数?【英文标题】:How to get a classifier's confidence score for a prediction in sklearn? 【发布时间】:2015-09-16 17:42:07 【问题描述】:我想获得它所做的每个预测的置信度分数,以显示分类器对其预测正确性的确定程度。
我想要这样的东西:
分类器对其预测的确定性如何?
1 级:81% 这是 1 级 第 2 类:10% 第 3 类:6% 第 4 类:3%
我的代码示例:
features_train, features_test, labels_train, labels_test = cross_validation.train_test_split(main, target, test_size = 0.4)
# Determine amount of time to train
t0 = time()
model = SVC()
#model = SVC(kernel='poly')
#model = GaussianNB()
model.fit(features_train, labels_train)
print 'training time: ', round(time()-t0, 3), 's'
# Determine amount of time to predict
t1 = time()
pred = model.predict(features_test)
print 'predicting time: ', round(time()-t1, 3), 's'
accuracy = accuracy_score(labels_test, pred)
print 'Confusion Matrix: '
print confusion_matrix(labels_test, pred)
# Accuracy in the 0.9333, 9.6667, 1.0 range
print accuracy
model.predict(sub_main)
# Determine amount of time to predict
t1 = time()
pred = model.predict(sub_main)
print 'predicting time: ', round(time()-t1, 3), 's'
print ''
print 'Prediction: '
print pred
我怀疑我会使用 score() 函数,但我似乎一直正确地实现它。我不知道这是否是正确的函数,但是如何获得分类器预测的置信百分比?
【问题讨论】:
非常有用的问题。有没有办法将类名也与概率相关联?例如,如果我得到以下输入 [0.33 0.25 0.75] 的概率列表。我知道第三个会被选中,但是第三个是指哪个类? 概率对应于classifier.classes_
。但是如果数据集很小,它们是无意义的:-(。此外,它们也不能保证与classifier.predict()
:'(。link to docs page
【参考方案1】:
根据SVC documentation,您似乎需要更改构建 SVC 的方式:
model = SVC(probability=True)
然后使用 predict_proba 方法:
class_probabilities = model.predict_proba(sub_main)
【讨论】:
好的,谢谢!您如何将 class_probabilities 转换为百分比形式?例如,我得到 [[1.614297e-03 3.99785477e-04 5.44054423e-02 9.9254921e-01]] 作为输出,但我不知道如何解释这些值,更不用说自己转换它们了。这些值到底是什么意思? @user3377126 你是如何解释这些值的 概率和置信度一样吗?而predict_proba
返回属于该特定类的该观察的概率/可能性。我们如何找到确定可能性的置信度
如果你有时间,可以帮助解决这个相关问题。 - stats.stackexchange.com/questions/560774/…【参考方案2】:
对于那些实施predict_proba()
方法的估计器,就像贾斯汀皮尔建议的那样,您可以使用predict_proba()
来产生预测的概率。
对于那些没有实现predict_proba()
方法的估计器,您可以使用bootstrap概念自己构建置信区间(在许多子样本中重复计算您的点估计)。
如果您需要任何详细的示例来演示这两种情况,请告诉我。
【讨论】:
好的,谢谢!您如何将 class_probabilities 转换为百分比形式?例如,我得到 [[1.614297e-03 3.99785477e-04 5.44054423e-02 9.9254921e-01]] 作为输出,但我不知道如何解释这些值,更不用说自己转换它们了。这些值到底是什么意思? @user3377126 它们已经是百分比形式。 :) 每行的总和应该正好等于 1。最后一个元素实际上是 0.992,这意味着算法预测它属于这个类,概率为 99.2%。注意e-03
只是科学记数法。
啊,我明白了,谢谢! :) 我会接受你的回答,但由于贾斯汀皮尔首先评论了对我有用的例子,我决定把它给他,对此感到抱歉,但感谢你的建议!
完全没问题。 :) 很高兴我们都能提供帮助。
有没有办法将类名也与概率相关联?例如,如果我得到以下输入 [0.33 0.25 0.75] 的概率列表。我知道第三个会被选中,但是第三个是指哪个类?以上是关于如何获得分类器对sklearn中预测的置信度分数?的主要内容,如果未能解决你的问题,请参考以下文章
Sklearn:使用 CalibratedClassifierCV 校准多标签分类
在分类树 Python 2.7 中查找预测响应的相应样本分数