我正在尝试使用quantregForest包中的quantregForest()
函数(它基于randomForest包构建。)
我尝试使用以下方式训练模型:
qrf_model <- quantregForest(x=Xtrain, y=Ytrain, importance=TRUE, ntree=10)
并且我收到以下错误消息(即使在将树的数量从100减少到10之后):
Error in rep(0, nobs * nobs * npred) : invalid 'times' argument
加上警告:
In nobs * nobs * npred : NAs produced by integer overflow
数据框Xtrain
有38个数字变量,如下所示:
> str(Xtrain)
'data.frame': 31132 obs. of 38 variables:
$ X1 : num 301306 6431 2293 1264 32477 ...
$ X2 : num 173.2 143.5 43.4 180.6 1006.2 ...
$ X3 : num 0.1598 0.1615 0.1336 0.0953 0.1988 ...
$ X4 : num 0.662 0.25 0.71 0.709 0.671 ...
$ X5 : num 0.05873 0.0142 0 0.00154 0.09517 ...
$ X6 : num 0.01598 0 0.0023 0.00154 0.01634 ...
$ X7 : num 0.07984 0.03001 0.00845 0.04304 0.09326 ...
$ X8 : num 0.92 0.97 0.992 0.957 0.907 ...
$ X9 : num 105208 1842 830 504 11553 ...
$ X10: num 69974 1212 611 352 7080 ...
$ X11: num 0.505 0.422 0.55 0.553 0.474 ...
$ X12: num 0.488 0.401 0.536 0.541 0.45 ...
$ X13: num 0.333 0.419 0.257 0.282 0.359 ...
$ X14: num 0.187 0.234 0.172 0.207 0.234 ...
$ X15: num 0.369 0.216 0.483 0.412 0.357 ...
$ X16: num 0.0765 0.1205 0.0262 0.054 0.0624 ...
$ X17: num 2954 77 12 10 739 ...
$ X18: num 2770 43 9 21 433 119 177 122 20 17 ...
$ X19: num 3167 72 49 25 622 ...
$ X20: num 3541 57 14 24 656 ...
$ X21: num 3361 82 0 33 514 ...
$ X22: num 3929 27 10 48 682 ...
$ X23: num 3695 73 61 15 643 ...
$ X24: num 4781 52 5 14 680 ...
$ X25: num 3679 103 5 23 404 ...
$ X26: num 7716 120 55 40 895 ...
$ X27: num 11043 195 72 48 1280 ...
$ X28: num 16080 332 160 83 1684 ...
$ X29: num 12312 125 124 62 1015 ...
$ X30: num 8218 99 36 22 577 ...
$ X31: num 9957 223 146 26 532 ...
$ X32: num 0.751 0.444 0.621 0.527 0.682 ...
$ X33: num 0.01873 0 0 0.00317 0.02112 ...
$ X34: num 0.563 0.372 0.571 0.626 0.323 ...
$ X35: num 0.366 0.39 0.156 0.248 0.549 ...
$ X36: num 0.435 0.643 0.374 0.505 0.36 ...
$ X37: num 0.526 0.31 0.577 0.441 0.591 ...
$ X38: num 0.00163 0 0 0 0.00155 0.00103 0 0 0 0 ...
响应变量Ytrain
如下所示:
> str(Ytrain)
num [1:31132] 2605 56 8 16 214 ...
我检查了Xtrain
或Ytrain
是否包含NA
以下的任何内容:
> sum(is.na(Xtrain))
[1] 0
> sum(is.na(Ytrain))
[1] 0
我假设无效的错误消息&#34;次&#34;由于整数溢出,rep(0, nobs * nobs * npred))
函数的参数来自分配给产品NA
的{{1}}值。
我不明白的是整数溢出的来源。我的变量都不属于整数类,所以我错过了什么?
答案 0 :(得分:2)
我检查了quantregForest()
函数的source code和predict.imp
函数调用的方法quantregForest()
的{{3}}。
我发现nobs
代表观察次数。在上面nobs =length(Ytrain) = 31132
的情况下。变量npred
代表预测变量的数量。它由npred = ncol(Xtrain)=38
给出。 npred
和nobs
都是类整数,
npred*npred*nobs = 31132*31132*38 = 36829654112.
这就是错误的根本原因,因为:
npred*npred*nobs = 36829654112 > 2147483647,
其中2147483647
是R中的最大整数值。因此,整数溢出警告以及用NA替换产品npred*npred*nobs
。
最重要的是,为了避免错误消息,我将在训练模型时使用相当少的观察值或在importance=FALSE
函数参数中设置quantregForest()
。查找变量重要性所需的计算是非常内存密集型,即使使用少于10000
个观察值也是如此。