R 指标 auc() 错误消息
R Metrics auc() error message
我正在尝试计算 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
知道这里发生了什么吗?
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
我正在尝试计算 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
知道这里发生了什么吗?
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