только исходя из того, что вы уже описали, все должно быть возможно в caret
.
Мой подход к этой проблеме заключается в использовании функции lappy
для списка всех типов моделей, которые вы хотите оценить. Хорошая вещь в этом заключается в том, что когда вы закончите, все train
объекты будут аккуратно сгруппированы вместе, что вы можете назвать, а затем легко извлечь любую информацию, которую вы ищете.
Теперь, когда у вас есть этот красивый список, вы можете просто повторить его снова с помощью другой функции применения для создания повторяющихся confusionMatrix
объектов, которые вы можете либо сохранить в виде списка, либо просто извлечь, напрямую, что угодноинформация, которую вы запрашиваете, с учетом прогнозов или точности набора тестов.
Оттуда должно быть довольно легко связать информацию, которую вы извлекаете, в таблицы для печати, сравнения, построения графика и т. д.
Так, например:
# set model names
models <- c("plr", "svmLinear", "rpart", "ada", "nnet", "knn")
# set train control params
trnControl <- trainControl(method='cv',number=5, allowParallel = T,verboseIter = T)
# fit models
set.seed(11)
train_models <- lapply(models, function(model){
print(model)
train(shortflag ~ ., method = model, data = trnds1, trControl = trnControl)
})
# name the models in your list
names(train_models) <- models
С этим у вас есть хороший список. Если вы сделаете View(train_models)
, вы можете просмотреть и развернуть все различные списки и посмотреть, что вы можете извлечь из них. Так, например, вы можете сделать что-то вроде этого, чтобы получить точность обучения, которая возвращает именованный список, чтобы вы знали, что к чему:
# extract training accuracy
elapsed <- sapply(train_models, function(object)
object$results["Accuracy"])
Далее, с вашим списком обученных моделей, это относительно простопройти и создать confusionMatrix
, чтобы получить любую информацию, которая вам нужна, с данными тестирования. Вот пример непосредственного извлечения списка точности модели из набора тестов:
# extract test accuracy
test_accuracy = sapply(train_models, function(x){
pred = predict(x, newdata = testds1)
cm = confusionMatrix(pred, reference = testds1$shortflag)
return(cm[["overall"]]["Accuracy"])
Один совет: если вы решите попробовать этот метод, я сначала взял бы небольшое подмножество ваших тренировок и тестированияданные и попытайтесь заставить код работать точно так, как вы хотите, в этом небольшом подмножестве, прежде чем начинать использовать все свои данные, как если бы вы вводили весь список моделей в функцию lapply
, как описано в первом шаге выше, это может занять много времени.
Надеюсь, это поможет!