Я сравниваю выбор методов ML, чтобы понять, какие из них лучше всего соответствуют моим данным.Для воспроизводимости я использовал данные Occupancy из репозитория UCI ML - доступны здесь: http://archive.ics.uci.edu/ml/machine-learning-databases/00357/
в последней строке, функция predict
завершается ошибкой со следующей ошибкой:
Ошибка вgnett.randomForest (modelFit, newdata): переменные в данных обучения отсутствуют в newdata
Вот мой код:
rm(list=ls()) # remove all variables from workspace
set.seed(01010)
# data from http://archive.ics.uci.edu/ml/machine-learning-databases/00357/
a<-read_csv("~/Documents/PhD/Analysis/1. Risk Score/occupancy_data/datatest.csv")
b<-read_csv("~/Documents/PhD/Analysis/1. Risk Score/occupancy_data/datatest2.csv")
c<-read_csv("~/Documents/PhD/Analysis/1. Risk Score/occupancy_data/datatraining.csv")
data <- rbind(a,b,c)
data$class<-as.factor(data$class)
data <- data %>% select(-Temperature,-date)
levels(data$class) <- c("A", "B") # classprob=true makes a variable for each class, with the class probs, but '0' and '1' aren't valid variable names
data_perm<-data[sample(nrow(data)),]
train <- data_perm[1:floor(0.6*nrow(data_perm)),]
xvalidate <- data_perm[(floor(0.6*nrow(data_perm))+1):floor(0.8*nrow(data_perm)),-ncol(data)]
yvalidate <- data_perm[(floor(0.6*nrow(data_perm))+1):floor(0.8*nrow(data_perm)),ncol(data)]
### Ensemble: Setting up training controls
# for the weak trainers
control_stacking <- trainControl(method="repeatedcv",
index = createFolds(train$class, 5),
savePredictions = "final",
classProb=TRUE)
# for the model combiner
stackControl <- trainControl(method="repeatedcv",
number=3,
repeats=2,
savePredictions=TRUE)
# define the hyperparameter list for each of the weak models to be included in the stack
models <- caretList(class~., data=train, trControl=control_stacking,
methodList=c('naive_bayes'),
tuneList=list(test=caretModelSpec(method='svmRadial')),
verbose=F)
temp <- caretStack(models, method="rf", metric="Accuracy", trControl=stackControl,verbose=F)
table(predict(temp, newdata=xvalidate))
Обратите внимание, что без tuneList
строка работает нормально, и это также работает для методов gbm
и rf
.
Любая помощь с благодарностью!