如何在python中计算单类支持向量机的AUC?

2024-04-16 04:51:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难在python中绘制OneClassSVM的AUC图(我使用sklearn,它会生成类似于[[tp, fp],[fn,tn]]和{}的混淆矩阵。在

from sklearn.metrics import roc_curve, auc
fpr, tpr, thresholds = roc_curve(y_test, y_nb_predicted)
roc_auc = auc(fpr, tpr) # this generates ValueError[1]
print "Area under the ROC curve : %f" % roc_auc
plt.plot(fpr, tpr, label='ROC curve (area = %0.2f)' % roc_auc)

我想处理错误[1]并为OneClassSVM绘制AUC。在

^{pr2}$

Tags: 绘制矩阵sklearntnfnroccurvefp
1条回答
网友
1楼 · 发布于 2024-04-16 04:51:49

请参阅my answer中类似的问题。要点是:

  • OneClassSVM基本上不支持将决策转换为概率分数,因此无法将必要的分数传递到需要改变分数阈值的函数中,例如ROC或精确召回曲线和分数。

  • 您可以通过计算输入数据中OneClassSVM决策函数的最大值来近似这类分数,将其称为MAX,然后通过计算y_score = MAX - decision_function(y)对给定观察结果y进行评分。

  • 使用这些分数作为y_score传递给诸如average_precision_score等函数,这些函数将接受非阈值分数而不是概率。

  • 最后,请记住,ROC对于OneClassSVM的物理意义不大,特别是因为OneClassSVM适用于存在预期的和巨大的类不平衡(离群值与非离群值)的情况,ROC不会准确地在少量异常值上增加相对成功的权重。

相关问题 更多 >