我一直在尝试使用library(doParallel)实现多核处理,但是不知何故出现了一个错误。我怀疑这是从doParallel软件包生成的错误。下面是我的代码(我跳过了数据处理部分以使代码简单):
library(caret)
library(doParallel)
cores=detectCores()
cl <- makeCluster(cores[1]-2)
registerDoParallel(cl)
ctrl<-trainControl(method='cv',number=5, classProbs = T,
summaryFunction = twoClassSummary, allowParallel = T)
#############
#XGBoost Tree
#############
xgb_grid<-expand.grid(
nrounds = 500,
max_depth = 5,
eta = c(0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1, 0.11, 0.12),
gamma = 0.3,
colsample_bytree = 0.25,
min_child_weight = 2,
subsample = 0.5
)
xgb <- caret::train(y ~ .,
data = train,
method = "xgbTree",
trControl = ctrl,
tuneGrid = xgb_grid,
metric = "ROC",
verbose = TRUE)
stopCluster(c1)
我得到以下错误:
Error in e$fun(obj, substitute(ex), parent.frame(), e$data) :
worker initialization failed: package or namespace load failed for ‘caret’
in loadNamespace(j <- i[[1L]], c(lib.loc, .libPaths()), versionCheck =
vI[[j]]):
there is no package called ‘generics’
我不确定是什么原因。似乎doParallel运行插入符号时出现问题?我确实知道,在trainControl下,allowParallel函数可以允许模型在需要时使用多核,但不是所有模型都可以。这就是为什么我要强迫插入符号使用多核来训练模型。