【问题标题】:R Metrics auc() error messageR 度量 auc() 错误消息
【发布时间】:2015-04-21 05:25:46
【问题描述】:

我正在尝试计算auc,但有一个奇怪的问题。当我运行这个脚本时:

rm(list = ls(all = T))
gc()

library(Metrics)
library(glmnet)

nrows <- 92681
set.seed(456)
df1 <- data.frame(act1 = round(runif(nrows), 0), pred1 = runif(nrows))

Metrics::auc(df1$act1, df1$pred1)
glmnet::auc(df1$act1, df1$pred1)

我明白了:

> Metrics::auc(df1$act1, df1$pred1)
[1] 0.4930949
> glmnet::auc(df1$act1, df1$pred1)
[1] 0.4930949

当我再添加一行并运行时:

rm(list = ls(all = T))
gc()

library(Metrics)
library(glmnet)

nrows <- 92682
set.seed(456)
df1 <- data.frame(act1 = round(runif(nrows), 0), pred1 = runif(nrows))

Metrics::auc(df1$act1, df1$pred1)
glmnet::auc(df1$act1, df1$pred1)

我明白了:

> Metrics::auc(df1$act1, df1$pred1)
[1] NA
Warning message:
In n_pos * n_neg : NAs produced by integer overflow
> glmnet::auc(df1$act1, df1$pred1)
[1] 0.5011554

知道这里发生了什么吗?

【问题讨论】:

    标签: r metrics roc glmnet auc


    【解决方案1】:

    Metrics::auc 使用的公式在分母中包含值 (n_pos * n_neg),在本例中为 'sum(actual == 1) * sum(actual == 0)' 计算结果为 整数 46308 * 46374 = 2147487192,超过了您机器可以处理的最大整数(即.Machine$integer.max)。

    例如:

    46308 * 46374
    #> 2147487192
    
    as.integer(46308) * as.integer(46374)
    #> [1] NA
    #> Warning message:
    #> In as.integer(46308) * as.integer(46374) : NAs produced by integer overflow
    

    【讨论】:

      猜你喜欢
      • 2015-11-05
      • 1970-01-01
      • 2014-04-03
      • 2016-08-30
      • 2013-10-07
      • 1970-01-01
      • 1970-01-01
      • 2013-04-23
      相关资源
      最近更新 更多