小编典典

如何在python中为一类SVM计算AUC?

python

我很难在python中绘制OneClassSVM的AUC图(我正在使用sklearn生成[[tp, fp],[fn,tn]]与相似的混淆矩阵fn=tn=0

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]和情节AUCOneClassSVM

[1] ValueError: Input contains NaN, infinity or a value too large for dtype('float64').

阅读 219

收藏
2021-01-20

共1个答案

小编典典

要点是:

  • OneClassSVM从根本上不支持将决策转换为概率分数,因此您无法将必要的分数传递到需要改变分数阈值的函数中,例如ROC或Precision-Recall曲线和分数。

  • 您可以通过在整个输入数据上计算OneClassSVM决策函数的最大值MAX,然后调用它,然后y通过计算对给定观察值的预测进行评分,来近似估算这种分数y_score = MAX - decision_function(y)

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

  • 最后,请记住,ROC对OneClassSVM的物理意义不大,特别是因为OneClassSVM用于存在预期的巨大类别失衡(异常值与非异常值)并且ROC无法准确地权衡相对成功的情况在少量异常值上。

2021-01-20