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

Posted

技术标签:

【中文标题】AUC-ROC 用于无排名分类器,例如 OSVM【英文标题】:AUC-ROC for a none ranking Classifier such as OSVM 【发布时间】:2018-09-30 14:23:49 【问题描述】:

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

现在假设我决定使用由 SVM (0,1) 创建的标签来绘制 AUC-ROC,它看起来像下面的图片我

是否仍将其视为 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

【问题讨论】:

@VivekKumar 您可能误读了这个问题:这个问题是在谈论One-Class SVM,它是用于异常值检测的标准 SVM 的修改版本,它不提供将与其他类型的 SVM 分类器一样,根据与分离超平面的距离将其分类为概率分数。这是 One-Class SVM 非常独特的。 @ely 是的,对不起。我现在看到了。谢谢指正。 【参考方案1】:

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

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

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

您选择精确率与召回率作为更好的指标是正确的,但在您在问题中显示的图中,您仍然在沿轴的真阳性率和假阳性率之上覆盖了一个图,而 AUC -pr(精确召回 AUC 分数)看起来只是一个用 0 填充的单点,表示误报率(例如,它纯粹是您的代码中用于绘图的错误)。

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

如果您在所有输入值 x 上计算 decision_function(x) 的最大值,则将其称为 MAX,那么关联分数的一种方法是将某些数据 y 的预测分数视为 @987654329 @。

这假设您的标签设置为 decision_function(x) 的大值意味着 x不是异常值,因此它确实具有用于的正类标签训练。如果您使用反向标签设置问题(意思是,您是否将 OneClassSVM 设置为预测离群值的“1”或预测离群值的“1”,即使训练数据仅包含一节课)。

然后,在documentation of average_precision_score 中,您可以看到输入y_score 可以是非阈值度量,例如来自decision_function。如果您有任何领域知识让您有理由考虑尝试它,您也可以对此进行修改,也许取该分数的log 等。

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

【讨论】:

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

用于多类分类的 ROC

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

文档主题生成模型(LDA)

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

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

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