我觉得我的数据集的运行时间非常慢,这是代码:
library(caret)
library(data.table)
knnImputeValues <- preProcess(mainData[trainingRows, imputeColumns], method = c("zv", "knnImpute"))
knnTransformed <- predict(knnImputeValues, mainData[ 1:1000, imputeColumns])
PreProcess 到 knnImputeValues 的运行速度相当快,但是 predict 函数需要大量时间。当我根据数据的子集计算它时,结果如下:
testtime <- system.time(knnTransformed <- predict(knnImputeValues, mainData[ 1:15000, imputeColumns
testtime
user 969.78
system 38.70
elapsed 1010.72
此外,应该注意插入符号预处理使用“RANN”。
现在我的完整数据集是:
str(mainData[ , imputeColumns])
'data.frame': 1809032 obs. of 16 variables:
$ V1: int 3 5 5 4 4 4 3 4 3 3 ...
$ V2: Factor w/ 3 levels "1000000","1500000",..: 1 1 3 1 1 1 1 3 1 1 ...
$ V3: Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
$ V4: int 2 5 5 12 4 5 11 8 7 8 ...
$ V5: int 2 0 0 2 0 0 1 3 2 8 ...
$ V6: int 648 489 489 472 472 472 497 642 696 696 ...
$ V7: Factor w/ 4 levels "","N","U","Y": 4 1 1 1 1 1 1 1 1 1 ...
$ V8: int 0 0 0 0 0 0 0 1 1 1 ...
$ V9: num 0 0 0 0 0 ...
$ V10: Factor w/ 56 levels "1","2","3","4",..: 45 19 19 19 19 19 19 46 46 46 ...
$ V11: Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
$ V12: num 2 5 5 12 4 5 11 8 7 8 ...
$ V13: num 2 0 0 2 0 0 1 3 2 8 ...
$ V14: Factor w/ 4 levels "1","2","3","4": 2 2 2 2 2 2 2 2 3 3 ...
$ V15: Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 2 2 2 ...
$ V16: num 657 756 756 756 756 ...
那么我做错了什么,或者这是典型的运行它需要多长时间?如果你回到信封外推(我知道这并不完全准确)你会得到什么 33 天?
另外看起来系统时间很短而用户时间很长,这正常吗?
我的电脑是笔记本电脑,配备 Intel(R) Core(TM) i5-6300U CPU @ 2.40Ghz 处理器。
此外,这会改善预测函数的运行时间吗?
cl <- makeCluster(4)
registerDoParallel()
我试过了,除了所有处理器在我的任务管理器中看起来更活跃之外,它似乎没有什么不同。
重点问题:我正在使用 Caret 包对 180 万行进行 KNN 插补,我目前这样做的方式需要一个多月的时间才能运行,我如何以这样的方式编写它,以便我可以在更快的时间(如果可能的话)?
感谢您提供的任何帮助。答案很可能是“这就是需要多长时间不要打扰”我只是想排除任何可能的错误。