Я пытаюсь применить найденное здесь решение для создания моделей машинного обучения:
Вот фиктивный набор данных:
data_pred <- data.frame(x1 = 1:10, x2 = 11:20, x3 = 21:30)
data_resp <- data.frame(y1 = c(1:5, NA, 7:10), y2 = c(NA, 2, NA, 4:10))
Вот мой метод цикла for()
для моделирования предикторов в data_pred
для каждого отдельного столбца измеренных ответов в data_resp
с использованием пакета caret
:
# data_pred contains predictors
# data_resp contains one column per measurement
# 1 matching row per observation in both data_pred and data_resp
for (i in 1:ncol(data_resp)) {
train(x = data_pred[!is.na(data_resp[, i]), ],
y = data_resp[!is.na(data_resp[, i], i],
... )
}
Теперь я пытаюсь сделать то же самое с lapply
, который, как мне кажется, имеет множество преимуществ. У меня возникла проблема с переводом критериев !is.na()
на лету, поэтому я моделирую только случаи, не относящиеся к NA, для каждого ответа. Вот моя начальная функция для проверки метода lapply
:
rf_func <- function(y) {
train(x = data_pred,
y = y,
method = "rf",
tuneGrid = data.frame(.mtry = 3:6),
nodesize = 3,
ntrees = 500,
trControl = trControl) }
Затем создайте пустой список для хранения результатов и примените функцию к data_resp
:
models <- list(NULL)
models$rf <- lapply(as.list(data_resp), rf_func)
Это прекрасно работает, так как randomForest
может обрабатывать NA
, но другие методы не могут, поэтому мне нужно удалить эти строки из каждого элемента data_resp
, а также соответствующие строки из моих предикторов.
Я пробовал это без успеха:
train(x = data_pred_scale[!is.na(y), ],
y = y[!is.na(y)],
... }
Я также пробовал y[[!is.na(y)]]
Как преобразовать метод data.frame (df[!is.na(df2), ]
) в lapply
?
x
и множество взвешенных ответов,y
. Я хотел бы использоватьx
s для прогнозирования каждого изy
s, по одному. Вспомните химические формулы. Представьте, что я создаю смесь с различными ингредиентами (x
s) и хочу смоделировать результирующую вязкость при различных температурах, модулях, температурах плавления и т. д. Имеет ли это больше смысла? Выяснение того, какиеx
использовать, является другим (и важным) вопросом, но мне все равно нужно смоделировать подмножествоx
для каждогоy
, что я и пытаюсь сделать выше. - person Hendy   schedule 23.07.2013