我想得到它所做的每个预测的置信度分数,显示分类器对其预测正确性的确定程度。
我想要这样的东西:
分类器对其预测的确定性如何?
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() 函数,但我似乎一直在正确地实现它。我不知道这是否是正确的功能,但如何获得分类器预测的置信度百分比?
根据 SVC 文档,您似乎需要更改构建 SVC 的方式:
model = SVC(probability=True)
然后使用predict_proba方法:
class_probabilities = model.predict_proba(sub_main)
对于那些实施
predict_proba()
方法的估算器,就像 Justin Peel 建议的那样,您可以只使用 predict_proba()
来产生预测概率。
对于那些没有实现
predict_proba()
方法的估计器,您可以使用引导程序概念自行构建置信区间(在许多子样本中重复计算您的点估计)。
如果您需要任何详细示例来演示这两种情况,请告诉我。
使用上面的代码,您将获得 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]}")
注意:您也可以简单地将其转换为数据框,您可以在其中添加预测类别的列,并在另一列中添加其预测值