如何在Python中计算One Class SVM的AUC?

2023-12-04

我在 python 中绘制 OneClassSVM 的 AUC 图时遇到困难(我使用 sklearn 生成混淆矩阵,例如[[tp, fp],[fn,tn]] with 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] 并绘制AUC for OneClassSVM.

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

请参见我的答案关于类似的问题。要点是:

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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Python中计算One Class SVM的AUC? 的相关文章

随机推荐