【问题标题】:R fast AUC function for non-binary dependent variable用于非二元因变量的 R 快速 AUC 函数
【发布时间】:2012-05-26 00:52:11
【问题描述】:

我正在尝试为一个大型数据集计算 AUC,但无法找到一个既能处理不只是 0 或 1 的值又能相当快地工作的数据集。

到目前为止,我已经尝试了 ROCR 包,但它只处理 0 和 1,pROC 包会给我一个答案,但可能需要 5-10 分钟来计算 100 万行。

请注意,我的所有值都介于 0 - 1 之间,但不一定是 1 或 0。

编辑:答案和预测都在 0 - 1 之间。

有什么建议吗?

EDIT2:

ROCR 可以处理这样的情况:

Ex.1
actual   prediction
  1         0
  1         1
  0         1
  0         1 
  1         0

或者像这样:

Ex.2
actual   prediction
  1         .25
  1         .1
  0         .9
  0         .01
  1         .88

但不是这样的情况:

Ex.3
actual   prediction
  .2         .25
  .6         .1
  .98        .9
  .05        .01
  .72        .88

pROC 可以处理 Ex.3,但计算时间很长。我希望对于像 Ex.3 这样的情况有更快的实现。

【问题讨论】:

  • 数据。我们需要一个例子。 “答案”和“预测”这两个词太模糊了,要求比“只处理 1 和 0”的方法更好的方法也是如此。
  • @DWin:我在上面添加了一些示例。让我知道他们是否有助于充实一些事情。抱歉没有详细说明。
  • 0.2 的“实际”是多少?这是分组数据吗?
  • @DWin:是的,它是分组的。它是网络广告的点击率百分比。因此,对于广告“x”,实际值为 0.2 意味着它显示了 10 倍并点击了 2 倍或类似的东西。
  • 所以你应该制作校准图而不是 ROC。或者您应该使用加权和cumsum 以可以计算 ROC 的形式重新转换数据。这些示例仍然不完整,因为它们没有从中得出比例的计数。

标签: r roc


【解决方案1】:

到目前为止,我已经尝试过 ROCR 包,但它只处理 0 和 1

您是在谈论参考类成员还是预测类成员? 后者在 ROCR 中可以介于 0 和 1 之间,请查看其示例数据集 ROCR.simple。

如果您的参考文献在 [0, 1] 中,您可以查看(免责声明:我的)软件包 softclassval。不过,您必须根据敏感性和特异性计算来构建 ROC/AUC。因此,除非您想到优化算法(如 ROCR 开发人员所做的那样),否则它也可能需要很长时间。在这种情况下,您还必须考虑敏感性和特异性到底应该意味着什么,因为这与 (0, 1) 中的参考成员资格不明确。

问题澄清后更新

您需要注意,将参考或实际组合在一起会丢失信息。例如,如果您有实际 = 0.5 和预测 = 0.8,那应该是什么意思?假设这些值真的是实际的 = 5/10 和预测 = 5/10。 通过将 10 个测试汇总为两个数字,您可以了解 10 个测试中有 5 个是否是相同。没有这个,实际 = 5/10 和预测 = 8/10 与 30 % 到 70 % 正确识别之间的任何内容一致!

这是一个讨论敏感性的插图(即正确识别,例如点击):

您可以在 softclassval.r-forge.r-project.org 的“关于 softclassval”部分找到讨论此类问题的完整海报和两个演示文稿。

继续这些想法,也可以使用平均绝对值、均方、均方根等误差的加权版本。

但是,所有这些表示模型相同性能特征的不同方式(例如,灵敏度 = 对实际点击事件的正确识别率)确实具有不同的含义,尽管它们与明确参考中的通常计算一致和预测情况,他们会对不明确的参考/部分参考类成员做出不同的反应。

另请注意,当您使用 [0, 1] 中的连续值作为参考/实际值和预测值时,整个测试将被压缩为 ROC 或特异性-敏感性图中的一个点(而不是一条线!)。

底线:数据的分组给你带来了麻烦。所以,如果你能以某种方式获取单击的信息,那就去获取吧!

【讨论】:

  • 谢谢这实际上帮助我意识到我自己并没有真正理解这个问题。感谢您指出这一点。
【解决方案2】:

您能否使用其他错误度量来评估方法性能? (例如平均绝对误差、均方根误差)?

这篇文章也可能对您有所帮助,但如果您对观察值和预测值有不同数量的类,那么您可能会遇到一些问题。

https://stat.ethz.ch/pipermail/r-help/2008-September/172537.html

【讨论】:

  • (根据更新后的问题,链接后面的代码无济于事,因为它需要通常的“硬”(即 {0, 1})类成员资格) , MAE, MSE(Brier score for classification)和RMSE都可以用,看我的回答。
猜你喜欢
  • 1970-01-01
  • 2021-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-07
  • 2022-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多