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

问题描述 投票:0回答:3

我想得到它所做的每个预测的置信度分数,显示分类器对其预测正确性的确定程度。

我想要这样的东西:

分类器对其预测的确定性如何?

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() 函数,但我似乎一直在正确地实现它。我不知道这是否是正确的功能,但如何获得分类器预测的置信度百分比?

python machine-learning scikit-learn probability prediction
3个回答
33
投票

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

model = SVC(probability=True)

然后使用predict_proba方法:

class_probabilities = model.predict_proba(sub_main)

16
投票

对于那些实施

predict_proba()
方法的估算器,就像 Justin Peel 建议的那样,您可以只使用
predict_proba()
来产生预测概率。

对于那些没有实现

predict_proba()
方法的估计器,您可以使用引导程序概念自行构建置信区间(在许多子样本中重复计算您的点估计)。

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


0
投票

使用上面的代码,您将获得 4 个类别名称以及每个样本的预测值。您可以根据需要更改 no_of_class。

probas1 =model.predict_proba(sub_main)
no_of_class=4

top3_classes1 = np.argsort(-probas1, axis=1)[:, :no_of_class]

class_labels1 = rf.classes_[top3_classes1[i]] for i in range(len(top3_classes1))]

class_labels1

top_confidence1=[probas1[i][top3_classes1[i]] for i in range(len(top_classes1))]

for i in range(len(class_labels1)):

    for j in range(no_of_class):

        print(f"Sample {i}: {class_labels1[i][j]} :: {top_confidence1[i][j]}")

注意:您也可以简单地将其转换为数据框,您可以在其中添加预测类别的列,并在另一列中添加其预测值

© www.soinside.com 2019 - 2024. All rights reserved.