为什么插入符号的“parRF”会导致“rf”不存在的调谐和缺失值错误

Why does caret's "parRF" lead to tuning and missing value errors not present with "rf"

提问人:Hack-R 提问时间:3/14/2015 最后编辑:KaraHack-R 更新时间:4/1/2016 访问量:1067

问:

我有一个整洁的数据集,没有缺失值,只有数值列。

该数据集既大又包含敏感信息,因此很遗憾,我无法在此处提供它的副本。

我用 的 将这些数据划分为训练集和测试集:caretcreateDataPartition

idx      <- createDataPartition(y = model_final$y, p = 0.6, list = FALSE )
training <- model_final[idx,]
testing  <- model_final[-idx,]
x        <- training[-ncol(training)]
y        <- training$y
x1       <- testing[-ncol(testing)]
y1       <- testing$y

row.names(training) <- NULL
row.names(testing)  <- NULL
row.names(x)        <- NULL
row.names(y)        <- NULL
row.names(x1)       <- NULL
row.names(y1)       <- NULL

我一直在定期通过以下方式对这些数据进行拟合和重新拟合随机森林模型:randomForest

  rf <- randomForest(x = x, y = y, mtry = ncol(x), ntree = 1000,
                     corr.bias = T, do.trace = T, nPerm = 3) 

我决定看看我是否可以获得更好或更快的结果,以下模型运行良好,但花了大约 2 个小时:train

rf_train <- train(y=y, x=x,
               method='rf', tuneLength = 3,
               trControl=trainControl(method='cv',number=10,
                                      classProbs = TRUE
               )

我需要采用 HPC 方法来使其在逻辑上可行,所以我尝试了

require(doParallel)
registerDoParallel(cores = 8)
rf_train <- train(y=y, x=x,
               method='parRF', tuneGrid = data.frame(mtry = 3), na.action = na.omit,
               trControl=trainControl(method='cv',number=10,
                                      classProbs = TRUE, allowParallel = TRUE)
               )

但无论我使用 tuneLength 还是 tuneGrid,这都会导致有关缺失值和调整参数的奇怪错误:

Error in train.default(y = y, x = x, method = "parRF", tuneGrid = data.frame(mtry = 3),  : 
  final tuning parameters could not be determined
In addition: Warning messages:
1: In nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo,  :
  There were missing values in resampled performance measures.
2: In train.default(y = y, x = x, method = "parRF", tuneGrid = data.frame(mtry = 3),  :
  missing values found in aggregated results

我说这很奇怪,因为没有错误,而且因为我进行了三重检查以确保没有缺失值。method = "rf"

在完全省略调谐选项时,我什至会遇到同样的错误。我还尝试打开和关闭该选项并更改为 .na.action"cv""repeatedcv"

我什至在这个超简化版本中遇到同样的错误:

rf_train <- train(y=y, x=x, method='parRF')
随机森林 R-插入符号 HPC

评论


答:

2赞 Binal Patel 5/30/2015 #1

似乎是因为插入符号中的错误。请参阅以下答案:

插入符号上的 parRF 不适用于多个内核

刚刚处理了同样的问题,在每个新集群上手动加载 foreach 似乎可以工作。

评论

0赞 Hack-R 5/30/2015
谢谢,谢谢一个好的链接。我很确定我在手动注册集群时遇到了这个错误,就像在那里的解决方案一样,但让我测试并验证我得到的第一次机会。如果我错了,那么我会将您的答案标记为解决方案。再次感谢!