rm(list=ls())在64GB上,然后出现错误:尝试决策树时无法分配大小为11.6 Gb的向量
我正在尝试通过caret软件包运行决策树。我通过使用rm(list=ls())在64GB上,然后出现错误:尝试决策树时无法分配大小为11.6 Gb的向量,r,memory,R,Memory,我正在尝试通过caret软件包运行决策树。我通过使用rm(list=ls())从内存中删除所有内容来重新开始我的脚本,然后加载我的训练数据,其中包括3M行和522个特征。R studio没有以gb为单位显示大小,但根据错误消息推测,大小为11.6 如果我使用的是64gb R,那么我是否会看到此错误?有没有办法不借助于较小数据的培训 rm(list = ls()) library(tidyverse) library(caret) library(xgboost) # read in data
rm(list=ls())
从内存中删除所有内容来重新开始我的脚本,然后加载我的训练数据,其中包括3M行和522个特征。R studio没有以gb为单位显示大小,但根据错误消息推测,大小为11.6
如果我使用的是64gb R,那么我是否会看到此错误?有没有办法不借助于较小数据的培训
rm(list = ls())
library(tidyverse)
library(caret)
library(xgboost)
# read in data
training_data <- readRDS("/home/myname/training_data.rds")
rm(list=ls())
图书馆(tidyverse)
图书馆(插入符号)
图书馆(xgboost)
#读入数据
培训数据以下是您的错误消息:
尝试决策树时无法分配大小为11.6 Gb的向量
这意味着当R请求另一个11.6 GB内存时发生了特定的故障,并且无法这样做。然而,随机林计算本身可能需要许多这样的分配,并且很可能剩余的空闲RAM已经被使用
我不知道您计算的细节,但我想说,即使在1GB数据集上运行随机林也已经非常大了。我的建议是找到一种方法,对数据集进行统计上精确的子样本,这样就不需要如此大量的RAM。您好,谢谢您提供的信息。如果我要求我们的管理员提供更多的RAM,有没有办法推断出我还需要多少?传递一个矩阵而不是一个数据帧会有帮助吗?@DougFir你需要弄清楚Caret随机森林计算的内存需求如何与输入数据的大小等相关。但是,正如我的回答所示,我认为你不应该需要这么多内存。你需要所有522功能吗?你需要300万行吗?关于功能,这是文本数据,非常稀疏,大部分是0。我想我确实需要它们,因为一个值为1的单一功能(标记)在分类上可能会有更大的不同。还有一点:如果你使用rf,比如说10%的随机子样本,那么你可以尝试使用不同的样本再次运行,看看情况是否发生了巨大的变化。我猜他们不会,但你会做出判断。
### Modelling
# tuning & parameters
set.seed(123)
train_control <- trainControl(
method = "cv",
number = 5,
classProbs = TRUE, # IMPORTANT!
verboseIter = TRUE,
allowParallel = TRUE
)
# Fit a decision tree (minus cad field)
print("begin decision tree regular")
mod_decitiontree <- train(
cluster ~.,
tuneLength = 5,
data = select(training_data, -c(cad, id)), # a data frame
method = "rpart",
trControl = train_control,
na.action = na.pass
)
Loading required package: rpart
Error: cannot allocate vector of size 11.6 Gb