如何获得分类器对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 中查找预测响应的相应样本分数

使用 OpenCV 在多类分类中获取 SVM 分类分数

基于协同训练的半监督文本分类算法

如何在 LogisticRegression 中获得概率和分类?

SkLearn SVM - 如何获得按概率排序的多个预测?