R Caret, как использовать те же функции в обучении и применении набора данных - PullRequest
0 голосов
/ 26 февраля 2020

Я работаю с пакетом caret, готовлю модель для классификации текста, но я столкнулся с проблемой, которая меня беспокоит, и я не могу найти правильное решение.

Я получил data.frame тренировок, таких как:

training <- data.frame(x = c(0,0,1),y = c(0,1,0), z = c(1,1,1), result =c('good','good','bad'))
training
  x y z result
1 0 0 1   good
2 0 1 1   good
3 1 0 1    bad

Итак, я тренирую свою модель следующим образом:

library(caret)
svm_mod <- train(sent ~ .,df,  method = "svmLinear")
# There were 42 warnings (use warnings() to see them)  Some warnings, not the point of the question

Теперь давайте пропустим часть тестирования, давайте подумаем, что все в порядке.

Теперь у меня есть настоящая работа, то есть предсказывать неизвестные данные. Моя проблема в том, что «применяемые» данные могут иметь столбцы, отличные от набора данных training, и прогнозирование не всегда разрешено:

# if the columns are the same, it's ok
applying <- data.frame(x = c(0,0,1),y = c(0,1,0), z = c(0,1,1))
predict(svm_mod, applying)

# if the columns in applying are more than in train, it's ok
applying <- data.frame(x = c(0,0,1),y = c(0,1,0), z = c(0,1,1), k=c(1,1,1))
predict(svm_mod, applying)

# if in applying is missing a column that is in train it does not work:
applying <- data.frame(x = c(0,0,1),y = c(0,1,0))
predict(svm_mod, applying)
# Error in eval(predvars, data, env) : object 'z' not found

Теперь решение должно состоять в том, чтобы добавить все отсутствующие столбцы в обучении, так как 0s:

applying$z <- 0

в наборе данных applying, но я нахожу это не очень правильным / хорошим. Есть ли правильное решение для этого? Я прочитал несколько вопросов по этому поводу (мой любимый this , мой вопрос о поиске обходного пути по этой проблеме).

Мои данные - фразы, и я использую термин документа матрица в качестве входных данных, в производственной среде это означает, что ввод будет более новым, без присутствия столбцов.

...