Я работаю с пакетом 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 , мой вопрос о поиске обходного пути по этой проблеме).
Мои данные - фразы, и я использую термин документа матрица в качестве входных данных, в производственной среде это означает, что ввод будет более новым, без присутствия столбцов.