如何在sklearn中获得分类器对预测的置信度?

use*_*126 15 python machine-learning probability prediction scikit-learn

我想得到它所做的每个预测的置信度分数,显示分类器对预测它是否正确的肯定程度.

我想要这样的东西:

分类器的预测有多确定?

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
Run Code Online (Sandbox Code Playgroud)

我怀疑我会使用score()函数,但我似乎一直在正确实现它.我不知道这是否是正确的功能,但是如何获得分类器预测的置信度?

Jus*_*eel 19

根据SVC文档,您似乎需要更改构建SVC的方式:

model = SVC(probability=True)
Run Code Online (Sandbox Code Playgroud)

然后使用predict_proba方法:

class_probabilities = model.predict_proba(sub_main)
Run Code Online (Sandbox Code Playgroud)

  • 啊好的,谢谢!您如何将 class_probabilities 转换为百分比形式?例如,我得到了 [[1.614297e-03 3.99785477e-04 5.44054423e-02 9.9254921e-01]] 作为输出,但我不知道如何解释这些值,更不用说自己转换了。这些值究竟是什么意思? (2认同)

Jia*_* Li 7

对于那些估算器实现predict_proba()方法,就像Justin Peel建议的那样,你可以predict_proba()用来产生预测的概率.

对于那些没有实现predict_proba()方法的估算器,您可以使用bootstrap概念自己构建置信区间(在许多子样本中重复计算您的点估计值).

如果您需要任何详细示例来证明这两种情况,请告诉我.

  • @ user3377126它们已经是百分比形式.:)每行的总和应该恰好等于1.最后一个元素实际上是0.992,这意味着算法预测它属于这个类,概率为99.2%.注意`e-03`只是科学记数法. (3认同)