«переменные в обучающих данных, отсутствующие в новых данных» при прогнозировании caretStack с помощью svmRadial в R - PullRequest
0 голосов
/ 17 октября 2018

Я сравниваю выбор методов 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.

Любая помощь с благодарностью!

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