Rcpp вместо mapply в валидации модели для многих подмножеств - PullRequest
0 голосов
/ 11 ноября 2018

Предположим, что мы указали N наборов данных о поездах (деление 80:20), и мы хотим получить список из двух элементов с pvalues ​​и коэффициентами из модели glm для каждого набора данных о поездах. Код, воспроизводящий этот пример, выглядит следующим образом:

library(parallel)
library(caret)

# prepare dataset
data(iris)
iris <- iris[!iris$Species == "setosa", ]

# create validation folds
set.seed(12345)
folds <- createDataPartition(y = iris$Species, times = 100, p = 0.8, list = FALSE)

# glm model expression
model.expr.tr <- expression(glm(formula = Species ~ Sepal.Length,
                                data = dtr,
                                family = binomial(link = "logit")))

# glm elements that will be validated
val_part <- list(coefs = expression(summary(eval(model.expr.tr))$coefficients[, 1]),
                 pvals = expression(summary(eval(model.expr.tr))$coefficients[, 4]))

# lapply with mapply for validation results
val_results <- lapply(val_part, function(x){
  mapply(function(i){
    trindex <- rownames(iris) %in% folds[, i]
    dtr <- iris[trindex, ]
    eval(x)
  },
  i = 1:100)
})

Как вы знаете, самая длинная часть - это прохождение сводки модели по всем наборам данных поезда, особенно если мы выберем более 100 из них. По вашему мнению, есть ли способ ускорить этот процесс? Конечно, я знаю о параметрах parLapply / mcmapply, но как насчет ускорения Rcpp в этом случае? Есть предложения?

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...