2016-08-17 28 views
3

我試圖建立一個隨機森林模型的數據集在Kaggle,我一直在做機器學習與脫字符包,數據集有150萬+行和沒有缺失值的46個變量(大小約150 mb),40個變量是分類變量,結果是我試圖預測的響應,它是二元的。在使用dplyr進行了一些預處理之後,我開始使用caret包構建模型,但是當我嘗試運行「train」函數時出現了此錯誤消息:「Error:can not allocate vector of size 153.1 Gb」這是我的代碼:隨機森林與脫字符包:錯誤:不能分配矢量的大小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.我無法獲得那臺大內存的機器,是否有任何workarouds來解決我可以通過我的模型構建過程來解決的問題?

回答

3

the dataset has 1.5 million + rows and 46 variables with no missing values (about 150 mb in size)

需要明確的是在這裏,你最有可能需要150萬行建立一個模型。相反,你應該採取一個不會導致內存問題的較小子集。如果您擔心縮減樣本數據的大小,那麼您可以對40個預測變量做一些描述性統計,並在一個較小的集合上進行,並確保行爲看起來相同。