Я пытаюсь понять, как распараллелить некоторый код из «интеллектуального анализа данных с R - обучением с использованием примеров», чтобы он быстрее выполнялся на моем MacBook Pro. Конкретный код вопроса ниже. Код в основном использует одни и те же данные (DS) и применяет шесть разных учащихся (например, svm, nnet для регрессии и классификации и т. Д.) С небольшим количеством вариантов.
Полный код: ЗДЕСЬ (в нижней части, в разделе «Оценка и выбор модели»).
for(td in TODO) {
assign(td,
experimentalComparison(
DSs,
c(
do.call('variants',
c(list('singleModel',learner=td),VARS[[td]],
varsRootName=paste('single',td,sep='.'))),
do.call('variants',
c(list('slide',learner=td,
relearn.step=c(60,120)),
VARS[[td]],
varsRootName=paste('slide',td,sep='.'))),
do.call('variants',
c(list('grow',learner=td,
relearn.step=c(60,120)),
VARS[[td]],
varsRootName=paste('grow',td,sep='.')))
),
MCsetts)
)
# save the results
save(list=td,file=paste(td,'Rdata',sep='.'))
}
Большая часть информации по распараллеливанию, которую я нахожу, кажется, более применима к таким вещам, как «применить», где одна и та же функция применяется к различным подмножествам данных. То, что делает этот код, наоборот - разные функции применяют одни и те же данные.
Было бы лучше распараллелить внешний цикл FOR, чтобы код внутри него выполнялся одновременно для нескольких учеников, а не для параллельного выполнения кода внутри цикла, чтобы разные оконные подходы были параллельны для одного ученика.
Выполнение за одну итерацию занимает чуть более 2 часов на моем macbook, где только 2 ядра, кажется, что-то делают (два других просто бездействуют). Фактический код по ссылке установлен на 20 итераций ... Было бы здорово использовать мои бездействующие ядра, чтобы уменьшить это