我目前正在研究AUC-ROC曲线,假设我有一个非排名分类器,比如一个只输出0和1的单类SVM,并且这些预测无法轻易转换为概率或得分。如果我不打算绘制AUC-ROC曲线,只想计算AUC来评估模型的表现,我可以这样做吗?这仍然可以称为AUC吗?特别是考虑到有两个阈值可以使用(0和1)?如果可以,这与使用排名得分计算的AUC一样有效吗?
假设我决定使用SVM生成的标签(0,1)来绘制AUC-ROC曲线,它看起来会像下面的图片那样
这仍然可以被认为是AUC曲线吗?
非常感谢您的帮助和支持
注意:我阅读了以下问题,但没有找到答案:https://www.researchgate.net/post/How_can_I_plot_determine_ROC_AUC_for_SVMhttps://stats.stackexchange.com/questions/37795/roc-curve-for-discrete-classifiers-like-svm-why-do-we-still-call-it-a-curve
回答:
标准的ROC曲线需要改变分类器的概率或得分阈值,并为每个变化的阈值获取相应的(真正率,真假阳率)有序对的图表。
由于单类SVM的定义方式,它的输出不包括概率结果或得分(这与标准SVM分类器有显著不同),这意味着除非您创建自己的得分版本,否则ROC曲线是不可用的,如下所述。
此外,单类SVM的训练数据极度不平衡,因为训练数据仅是一组“正”示例,例如来自所讨论分布的观测值。ROC曲线无论如何都会受到大类不平衡的影响,因此ROC曲线可能具有误导性,因为少数异常值的分类得分将比大量位于观察分布高密度区域的非异常值的得分重要得多。因此,即使您创建了自己的得分,建议避免使用ROC曲线来评估这种类型的模型。
您选择使用精确度与召回率作为更好的度量标准是正确的,但在您的问题中展示的图表中,您仍然在真阳率和假阳率的轴上叠加了一个图表,而AUC-pr(精确度召回率AUC得分)看起来只是一个单点,并在假阳率上填充了0(例如,这是您绘图代码中的一个错误)。
为了获得真正的精确度召回率曲线,您需要某种方法将分数与异常值决策关联起来。一个建议是使用训练后的OneClassSVM
对象的decision_function
属性。
如果您计算所有输入值x
的decision_function(x)
的最大值,称之为MAX
,那么一种关联分数的方法是将对某些数据y
的预测分数视为score = MAX - decision_function(y)
。
这假设您已经设置了标签,使得decision_function(x)
的大值意味着x
不是异常值,因此它具有用于训练的正类标签。如果您以相反的方式设置问题(意思是,您设置单类SVM对异常值预测‘1’还是对非异常值预测‘1’,尽管训练数据仅包含一个类),您可以使用倒数或其他变换方式。
然后,在average_precision_score
的文档中,您可以看到输入y_score
可以是非阈值度量,比如来自decision_function
。您还可以对其进行调整,例如取该分数的log
,如果您有任何关于它的领域知识让您认为应该尝试的话。
一旦您有了这些手动创建的分数,您就可以将它们传递给需要改变阈值的任何精确度/召回率函数。这不是完美的,但至少可以让您了解决策边界在分类中的使用效果如何。