我正在尝试为Kaggle中的数据集构建随机森林模型,我总是使用插入包进行机器学习,数据集有150万+行和46个变量,没有缺失值(大小约为150 mb),40 +变量是分类的,结果是我试图预测的响应,它是二进制的。在使用dplyr进行一些预处理之后,我开始使用插入符号包构建模型,但是当我尝试运行“train”函数时,我收到此错误消息:“错误:无法分配大小为153.1 Gb的向量”这是我的代码:
## load packages
require(tidyr)
require(dplyr)
require(readr)
require(ggplot2)
require(ggthemes)
require(caret)
require(parallel)
require(doParallel)
## prepare for parallel processing
n_Cores <- detectCores()
n_Cluster <- makeCluster(n_Cores)
registerDoParallel(n_Cluster)
## import orginal datasets
people_Dt <- read_csv("people.csv",col_names = TRUE)
activity_Train <- read_csv("act_train.csv",col_names = TRUE)
### join two sets together and remove variables not to be used
first_Try <- people_Dt%>%
left_join(activity_Train,by="people_id")%>%
select(-ends_with("y"))%>%
filter(!is.na(outcome))
## try with random forest
in_Tr <- createDataPartition(first_Try$outcome,p=0.75,list=FALSE)
rf_Train <- firt_Try[in_Tr,]
rf_Test <- firt_Try[-in_Tr,]
## set model cross validation parameters
model_Control <- trainControl(method = "repeatedcv",repeats=2,number=2,allowParallel = TRUE)
rf_RedHat <- train(outcome~.,
data=rf_Train,
method="rf",
tuneLength=10,
importance=TRUE,
trControl=model_Control)
我的电脑是一款功能强大的机器,配有E3处理器和32GB内存。我有两个问题: 1.我从哪里得到一个大到150GB的矢量?是因为我写的一些代码? 2.我无法得到一台带有那么大的公羊的机器,是否有任何工作方法可以解决我可以继续进行模型构建过程的问题?
答案 0 :(得分:3)
数据集有150万+行和46个变量,没有缺失值(大小约为150 mb)
要明确这一点,您很可能不需要150万行来构建模型。相反,你应该采用一个不会导致内存问题的较小子集。如果您担心缩小样本数据的大小,那么您可以在较小的集合上对40个预测变量做一些描述性统计,并确保行为看起来是相同的。
答案 1 :(得分:0)
问题可能与分类变量中插入符号的单热编码有关。由于您有很多分类变量,这似乎是一个真正的问题,因此它会以巨大的方式增加您的数据集。单热编码将为您拥有的每个分类变量的每个因子创建一个新列。
也许您可以尝试像h2o-package这样的东西,它以另一种方式处理分类变量,以便在模型运行时不会爆炸数据集。