none 排序分类器(例如 OSVM)的 AUC-ROC
AUC-ROC for a none ranking Classifier such as OSVM
我目前正在使用 auc-roc 曲线,假设我有一个 none 排名分类器,例如一个 class SVM,其中预测为 0 和 1,并且预测为不容易转换为概率或分数,如果我不想绘制 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_SVM
https://stats.stackexchange.com/questions/37795/roc-curve-for-discrete-classifiers-like-svm-why-do-we-still-call-it-a-curve
标准 ROC 曲线需要改变 classifier 的概率或分数阈值,并为每个不同的阈值获取相应的有序对(真阳性率、假阳性率)图。
由于 One-Class SVM 的定义方式使其不会产生概率结果或分数作为其输出的一部分(这与标准 SVM classifiers 有很大不同) ,这意味着 ROC 曲线不适用,除非您创建自己的分数版本,如下所述。
此外,One-Class SVM 的训练特别不平衡,因为训练数据只是一组 "positive" 个示例,例如来自相关分布的观察结果。无论如何,ROC 曲线都会受到很大 class 不平衡的影响,因此 ROC 曲线可能会产生误导,因为少数异常值的 class 化分数比异常值的分数重要得多在观察到的分布的最高密度区域的中心的一堆非异常值。因此,即使您创建自己的分数,也建议避免此类模型的 ROC。
您选择精度与召回率作为更好的指标是正确的,但是在您在问题中显示的图中,您仍然沿着轴将图叠加在真阳性率和假阳性率之上,而AUC-pr(precision recall AUC score)看起来只是一个用 0 填充的误报率点(例如,这纯粹是您绘图代码中的一个错误)。
为了获得实际的准确率召回曲线,您需要某种方法将分数与离群值决策相关联。 One suggestion是训练后使用拟合的OneClassSVM
对象的decision_function
属性
如果您计算所有输入值 x
的 decision_function(x)
的最大值,称之为 MAX
,那么关联分数的一种方法是将分数用于预测一些数据 y
为 score = MAX - decision_function(y)
。
这假设您的标签设置方式是 decision_function(x)
的大值意味着 x
不是 异常值,所以它确实如此具有用于训练的正 class 标签。如果您使用反向标签设置问题(意思是,您是否将 OneClassSVM 设置为预测离群值的“1”或内值的“1”,您可以采用倒数或使用其他转换,即使训练数据仅包含一个 class).
然后,在 documentation of average_precision_score
中,您可以看到输入 y_score
可以是非阈值度量,例如 decision_function
。你也可以修改这个,也许拿 log
那个分数,等等,如果你有任何关于它的领域知识让你有理由考虑尝试它。
获得这些手动创建的分数后,您可以将它们传递给任何需要改变阈值的精度/召回函数。它并不完美,但至少让您了解决策边界用于 class化的效果。
我目前正在使用 auc-roc 曲线,假设我有一个 none 排名分类器,例如一个 class SVM,其中预测为 0 和 1,并且预测为不容易转换为概率或分数,如果我不想绘制 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_SVM https://stats.stackexchange.com/questions/37795/roc-curve-for-discrete-classifiers-like-svm-why-do-we-still-call-it-a-curve
标准 ROC 曲线需要改变 classifier 的概率或分数阈值,并为每个不同的阈值获取相应的有序对(真阳性率、假阳性率)图。
由于 One-Class SVM 的定义方式使其不会产生概率结果或分数作为其输出的一部分(这与标准 SVM classifiers 有很大不同) ,这意味着 ROC 曲线不适用,除非您创建自己的分数版本,如下所述。
此外,One-Class SVM 的训练特别不平衡,因为训练数据只是一组 "positive" 个示例,例如来自相关分布的观察结果。无论如何,ROC 曲线都会受到很大 class 不平衡的影响,因此 ROC 曲线可能会产生误导,因为少数异常值的 class 化分数比异常值的分数重要得多在观察到的分布的最高密度区域的中心的一堆非异常值。因此,即使您创建自己的分数,也建议避免此类模型的 ROC。
您选择精度与召回率作为更好的指标是正确的,但是在您在问题中显示的图中,您仍然沿着轴将图叠加在真阳性率和假阳性率之上,而AUC-pr(precision recall AUC score)看起来只是一个用 0 填充的误报率点(例如,这纯粹是您绘图代码中的一个错误)。
为了获得实际的准确率召回曲线,您需要某种方法将分数与离群值决策相关联。 One suggestion是训练后使用拟合的OneClassSVM
对象的decision_function
属性
如果您计算所有输入值 x
的 decision_function(x)
的最大值,称之为 MAX
,那么关联分数的一种方法是将分数用于预测一些数据 y
为 score = MAX - decision_function(y)
。
这假设您的标签设置方式是 decision_function(x)
的大值意味着 x
不是 异常值,所以它确实如此具有用于训练的正 class 标签。如果您使用反向标签设置问题(意思是,您是否将 OneClassSVM 设置为预测离群值的“1”或内值的“1”,您可以采用倒数或使用其他转换,即使训练数据仅包含一个 class).
然后,在 documentation of average_precision_score
中,您可以看到输入 y_score
可以是非阈值度量,例如 decision_function
。你也可以修改这个,也许拿 log
那个分数,等等,如果你有任何关于它的领域知识让你有理由考虑尝试它。
获得这些手动创建的分数后,您可以将它们传递给任何需要改变阈值的精度/召回函数。它并不完美,但至少让您了解决策边界用于 class化的效果。