Ошибка в обучении модели SVM: Ошибка: для одного или нескольких уровней факторов в результате нет данных: "2"
У меня есть следующий набор данных (дан образец первых 10 строк)
structure(list(variableA = c(11L, 7L, 17L, 7L, 7L, 2L,
2L, 7L, 7L, 4L), variableB = c(10L, 20L, 4L, 0L, 0L, 1L,
1L, 0L, 0L, 2L), variableC = c(284L,
43L, 19L, 0L, 0L, 27L, 27L, 0L, 0L, 20L), variableD = c(299L,
24L, 28L, 167L, 167L, 27L, 27L, 194L, 194L, 21L), variableE = c(2,
1, 1, 1, 1, 1, 1, 1, 1, 1), variableF1 = c(0L, 0L,
0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L), variableF2 = c(0L,
0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L), variableF3 = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), variableF4 = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), variableF5 = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), variableF6 = c(1L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), variableF7 = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), variableF8 = c(0L,
1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), variableF9 = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), variableF10 = c(0L,
0L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 0L), variableG1 = c(1L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), variableG2 = c(0L,
0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L), variableG3 = c(0L,
1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L), clusters = structure(c(3L,
3L, 3L, 3L, 3L, 3L, 3L, 1L, 6L, 6L), .Label = c("1", "2", "3",
"4", "5", "6"), class = "factor"), out = structure(c(1L, 1L,
1L, 1L, 1L, 1L, 1L, 2L, 6L, 6L), .Label = c("3", "1", "2", "4",
"5", "6"), class = "factor")), row.names = c(1L, 3L, 4L, 5L,
6L, 8L, 9L, 12L, 13L, 14L), class = "data.frame")
Я пытался использовать алгоритм векторной машины поддержки для этого набора данных, раньше он работал хорошо, теперь по какой-то причине он дает ошибку.
модель, которую я пробую, это
set.seed(111)
trctrl <- trainControl(method = "repeatedcv", number = 10, repeats = 3)
svm_Linear <- train(out~`variableA` + `variableB` +
`variableC` +`variableD`+
`variableE` +`variableF1` +
`variableF2` + `variableF3` +
`variableF4` + `variableF5` +
`variableF6` + `variableF7` +
`variableF8` + `variableF9` +
`variableF10` + `variableG1` +
`variableG2` + `variableG3` , data= train, method = "svmLinear",
trControl=trctrl,
preProcess = c("center", "scale"),
tuneLength = 10)
svm_Linear
Но я получаю эту ошибку, которую не могу понять.
Error: One or more factor levels in the outcome has no data: '2'
Я видел похожий пост на этом сайте, но ни у одного нет ответа, который мне нужен
1 ответ
Твой
out
столбец представляет собой фактор с 6 уровнями, но только 3 представлены в
dput
вы указали в своем сообщении - вот почему вы получаете эту ошибку.
levels(train$out)
# "3" "1" "2" "4" "5" "6"
unique(train$out)
# 3 1 6
# Levels: 3 1 2 4 5 6
Вероятно, это связано с тем, как вы выполнили разделение на поезд / тест.
Вы можете переопределить
levels(out)
включить только
c(1, 3, 6)
, но это будет проблемой, если ваши тестовые данные содержат другие уровни ответа.
Вместо этого рассмотрите возможность использования подхода стратифицированной выборки, чтобы убедиться, что ваша переменная ответа правильно представлена в группе поезд / тест. Вопросы о стратифицированной выборке больше подходят для перекрестной проверки, чем для переполнения стека, но есть несколько хороших отправных точек, упомянутых в этом сообщении SO и в этом.