AUC-ROC用于无排名分类器,例如OSVM

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AUC-ROC用于无排名分类器,例如OSVM相关的知识,希望对你有一定的参考价值。

我目前正在使用auc-roc曲线,并且假设我有一个无排名的分类器,例如一个类SVM,其中预测为0和1,如果我不想要,预测不会轻易转换为概率或分数为了绘制AUC-ROC,我只想计算AUC用它来看看我的模型做得有多好,我还能这样做吗?是否还会被称为AUC,尤其是有两个可以使用的阈值(0,1)?如果是这样,那就像用排名分数计算AUC一样好

现在让我说我决定使用SVM(0,1)创建的标签绘制AUC-ROC,它看起来像下面的图片我enter image description here

它还会被视为和AUC曲线吗?

非常感谢你的帮助和支持

注意:我已阅读以下问题而我没有找到答案:https://www.researchgate.net/post/How_can_I_plot_determine_ROC_AUC_for_SVM https://stats.stackexchange.com/questions/37795/roc-curve-for-discrete-classifiers-like-svm-why-do-we-still-call-it-a-curve

答案

标准ROC曲线需要改变分类器的概率或分数阈值,并获得每个变化阈值的有序对(真阳性率,假阳性率)的对应图。

由于One-Class SVM的定义方式不会产生概率结果或分数作为其输出的一部分(这与标准SVM分类器明显不同),这意味着除非您创建自己的ROC曲线,否则ROC曲线不适用如下所述的得分版本。

此外,One-Class SVM的训练特别严重不平衡,因为训练数据仅仅是一组“积极”的例子,例如来自有关分布的观察结果。 ROC曲线无论如何都会受到大类不平衡的影响很大,因此ROC曲线可能会产生误导,因为少数异常值的分类得分比一堆非离群值的得分要重要得多。观察到的分布密度最高的区域。因此,建议您避免使用此类模型的ROC,即使您创建自己的分数也是如此。

选择精确度与召回作为更好的度量标准是正确的,但在您在问题中显示的图中,您仍然会在真实正率和沿轴的误报率上叠加图,而AUC-pr(精确回忆AUC得分)看起来只是用假阳性率填充0的单点(例如,它纯粹是你的代码中用于绘图的错误)。

为了获得实际的精确回忆曲线,您需要某种方法将分数与异常值决策相关联。 One suggestion是在训练后使用拟合的decision_function物体的OneClassSVM属性。

如果你在所有输入值decision_function(x)上计算x的最大值,请调用此MAX,然后关联分数的一种方法是将某些数据y上的预测得分视为score = MAX - decision_function(y)

这假设您设置标签的方式是decision_function(x)的大值意味着x不是异常值,因此它确实具有用于训练的正类的标签。如果使用反向标签设置问题,则可以采用倒数或使用其他转换(意味着,无论是将OneClassSVM设置为针对异常值预测'1'还是针对内部预测器预测'1',即使训练数据仅包含一节课)。

然后,在documentation of average_precision_score中,您可以看到输入y_score可以是非阈值测量,例如来自decision_function。你也可以修补这个,也许拿这个分数的log等,如果你有任何关于它的领域知识,给你一个思考尝试它的理由。

获得这些手动创建的分数后,您可以将它们传递给需要更改阈值的任何精确/召回功能。它并不完美,但至少可以让您了解决策边界用于分类的程度。

以上是关于AUC-ROC用于无排名分类器,例如OSVM的主要内容,如果未能解决你的问题,请参考以下文章

用于多类分类的 ROC

如何在交叉验证时获得AUC-ROC而不是准确度?

混淆矩阵-MATLAB代码详解

是否有用于无符号数字类型包装器的 Java 库? [关闭]

用于新语言的基于 python 的朴素基分类器

用于整数特征的 NLTK 分类器?