Я использую ReliefF для выбора функций (используя пакет «CORElearn»).Это работало очень хорошо раньше.Но позже я хочу ускорить мой код.Поскольку в моем коде есть начальная загрузка (каждый цикл выполняет одно и то же, включая ReliefF), поэтому я использую пакет «параллельный» для параллельных вычислений.Но я понял, что каждый раз, когда речь заходит о части ReliefF, код просто застревает там.
Соответствующие коды следующие:
num.round <- 10 # number of rounds for bootstrap
rounds.btsp <- seq(1, num.round) # sequence of numbers for bootstrap, used for parallel computing
boot.strap <- function(round.btsp) {
## some codes using other feature selection methods
print('Finish feature selection using other methods') # I can get this output
# use ReliefF to rank the features
data.ref <- data.frame(t(x.train.resample), y.train.resample, check.names = F) # add the param to avoid changing '-' to '.'
print('Start using attrEval') # I’ll get this output, but then I'll get stuck here
estReliefF <- attrEval('y.train.resample', data.ref, estimator = 'ReliefFexpRank', ReliefIterations = 30)
names(estReliefF) <- fea.name # This command needs to be added because it's very annoying that 'attrEval' will change the '-' in the names to '.'
print('Start using estReliefF') # I’ll never get here
fea.rank.ref <- estReliefF[order(abs(estReliefF), decreasing = T)]
fea.rank.ref <- data.frame(importance = fea.rank.ref)
fea.rank.name.ref <- rownames(fea.rank.ref) # the ranked feature list for this round
return(fea.rank.name.ref)
}
results.btsp <- mclapply(rounds.btsp, boot.strap, mc.cores = num.round)
То, что я сейчас думаюявляется то, что функция 'attrEval' будет использовать несколько ядер для параллельных вычислений (я читал это в документе: https://cran.r -project.org / web / packages / CORElearn / CORElearn.pdf ).Тогда будет какой-то конфликт с той параллелью, которую я использую.Когда я изменяю num.round на 1, тогда нет проблем с запуском кода (но даже если я установлю его на 2, он не будет работать).
Сервер, который я использую, имеет 80 ядер.
Есть ли способ решить эту проблему?Я думаю, что отключение параллельных вычислений для функции 'attrEval' может быть решением?Хотя я не знаю, как это сделать ~~~