2015-10-18 4 views
0

Я пытаюсь предсказать с упрощенной моделью Knn с использованием пакета каретки в R. Это всегда дает ту же ошибку, даже в самом простом примере воспроизводимого здесь:Caret и КННЫ в R: предсказать функция выдает ошибку

library(caret) 
set.seed(1) 

#generate training dataset "a" 
n = 10000 
a = matrix(rnorm(n*8,sd=1000000),nrow = n) 
y = round(runif(n)) 
a = cbind(y,a) 
a = as.data.frame(a) 
a[,1] = as.factor(a[,1]) 
colnames(a) = c("y",paste0("V",1:8)) 

#estimate simple KNN model 
ctrl <- trainControl(method="none",repeats = 1) 
knnFit <- train(y ~ ., data = a, method = "knn", trControl = ctrl, preProcess = c("center","scale"), tuneGrid = data.frame(k = 10)) 

#predict on the training dataset (=useless, but should work) 
knnPredict <- predict(knnFit,newdata = a, type="prob") 

Это дает

Ошибка в [.data.frame (из,, obsLevels, падение = FALSE): неопределенные столбцы выбраны

Определение более реалистичный тест набора данных "б" без целевой переменной у ...

#generate test dataset 
b = matrix(rnorm(n*8,sd=1000000),nrow = n) 
b = as.data.frame(b) 
colnames(b) = c(paste0("V",1:8)) 

#predict on the test datase 
knnPredict <- predict(knnFit,newdata = b, type="prob") 

дает ту же ошибку,

Ошибка в [.data.frame (из,, obsLevels, падение = FALSE): неопределенные столбцы выбраны

Я знаю, что columnames очень важны, но здесь они идентичны. Что здесь не так? Благодаря!

ответ

1

Проблема заключается в вашей переменной y. Когда вы запрашиваете вероятности класса, поезд и/или функция прогнозирования помещают их в кадр данных со столбцом для каждого класса. Если уровни факторов не являются допустимыми именами переменных, они автоматически меняются (например, «0» становится «X0»). См. Также это post.

Если вы измените эту строку в коде, он должен работать:

a[,1] = factor(a[,1], labels = c("no", "yes")) 
+0

Спасибо, я прочитал ответ в другой теме слишком поздно ... –

Смежные вопросы