Я использую отличный пакет R, каретку, и я хотел бы запустить функцию обучения в списке нескольких наборов обучающих данных. Теперь я понимаю, что документация для функции поезда говорит, что аргумент данных должен быть фреймом данных, поэтому то, что я пытаюсь сделать, может быть просто невозможно, и это может быть лучше предложено в качестве улучшения для каретки, но я хотел посмотреть, если кто-нибудь пытался сделать это.
Используя данные Sonar в иллюстративных целях, я создал список (названный обоими), состоящий из двух кадров данных, каждый из которых представляет собой отдельный набор обучающих данных. Затем я использую mapply, чтобы применить функцию поезда к каждому элементу в списке. К сожалению, я получаю пугающие результаты. В частности, я надеялся, что метрики в pls1.3..A[[2]] будут идентичны метрикам в pls1.3..B2. Как видите, это не так. Как ни странно, pls1.3..A[[1]] соответствуют pls1.3..B1. Есть ли что-то очевидное, что я делаю неправильно, или это просто невозможно (сейчас)? (Я использую R 3.1.1 на 1,4 ГГц Intel Core i5 Mac.)
Воспроизводимый код (и вывод закомментирован) выглядит следующим образом:
require(doMC)
registerDoMC(cores = 2)
library(caret)
library(mlbench)
data(Sonar)
set.seed(1234)
inTrain <- createDataPartition(y = Sonar$Class,
p = .75,
list = FALSE)
training <- Sonar[ inTrain,]
training2 <- Sonar[-inTrain,]
both <- list(training, training2)
#both_test <- list(training[c(1:100),], training2[c(1:35),]) #SILLY test data for functionality testing only
set.seed(1234)
labels <- list()
for(i in 1:length(both)) {
labels[i] <- list(both[[i]]$Class)
}
#NEW CODE -- ADDED BASED ON @Josh W's comment -- removing the label (Class) variable from the feature matrix
both <- lapply(both, function(x) {
subset(x[,c(1:60)])
})
#NEW CODE -- changed from using the formula implementation of caret to the x (feature matrix), y (label/outcome vector)
pls1.3..A <- mapply(function(x,y) train(x, y, method = "pls", preProc = c("center", "scale")), x = both, y = labels, SIMPLIFY = FALSE)
pls1.3..A
#[[1]]
#Partial Least Squares
#157 samples
# 60 predictor
# 2 classes: 'M', 'R'
#Pre-processing: centered, scaled
#Resampling: Bootstrapped (25 reps)
#Summary of sample sizes: 157, 157, 157, 157, 157, 157, ...
#Resampling results across tuning parameters:
# ncomp Accuracy Kappa Accuracy SD Kappa SD
# 1 0.6889679 0.3756821 0.06015197 0.11605511
# 2 0.7393776 0.4742204 0.04962609 0.09775688
# 3 0.7410997 0.4793703 0.04856698 0.09412599
#Accuracy was used to select the optimal model using the largest value.
#The final value used for the model was ncomp = 3.
#[[2]]
#Partial Least Squares
#51 samples
#60 predictors
# 2 classes: 'M', 'R'
#Pre-processing: centered, scaled
#Resampling: Bootstrapped (25 reps)
#Summary of sample sizes: 51, 51, 51, 51, 51, 51, ...
#Resampling results across tuning parameters:
# ncomp Accuracy Kappa Accuracy SD Kappa SD
# 1 0.6452693 0.2929118 0.08076455 0.1525176
# 2 0.6468405 0.2902136 0.09686340 0.1790924
# 3 0.6559113 0.3087227 0.08025215 0.1547317
#Accuracy was used to select the optimal model using the largest value.
#The final value used for the model was ncomp = 3.
set.seed(1234)
pls1.3..B1 <- train(both[[1]],
labels[[1]],
method = "pls",
preProc = c("center", "scale"))
pls1.3..B1
#Partial Least Squares
#157 samples
# 60 predictor
# 2 classes: 'M', 'R'
#Pre-processing: centered, scaled
#Resampling: Bootstrapped (25 reps)
#Summary of sample sizes: 157, 157, 157, 157, 157, 157, ...
#Resampling results across tuning parameters:
# ncomp Accuracy Kappa Accuracy SD Kappa SD
# 1 0.6889679 0.3756821 0.06015197 0.11605511
# 2 0.7393776 0.4742204 0.04962609 0.09775688
# 3 0.7410997 0.4793703 0.04856698 0.09412599
#Accuracy was used to select the optimal model using the largest value.
#The final value used for the model was ncomp = 3.
set.seed(1234)
pls1.3..B2 <- train(both[[2]],
labels[[2]],
method = "pls",
preProc = c("center", "scale"))
pls1.3..B2
#Partial Least Squares
#51 samples
#60 predictors
# 2 classes: 'M', 'R'
#Pre-processing: centered, scaled
#Resampling: Bootstrapped (25 reps)
#Summary of sample sizes: 51, 51, 51, 51, 51, 51, ...
#Resampling results across tuning parameters:
# ncomp Accuracy Kappa Accuracy SD Kappa SD
# 1 0.6127279 0.2518488 0.11925682 0.1959400
# 2 0.6792163 0.3618657 0.09386771 0.1776549
# 3 0.6673662 0.3343716 0.07524373 0.1476405
#Accuracy was used to select the optimal model using the largest value.
#The final value used for the model was ncomp = 2.