0

I have a dataframe I want to make predictions on from an SVM, but the dataframe doesn't have all of the levels that the original training dataframe did. Is there an easy way around this?

Here's a quick example

library(e1071)
df = data.frame(y = c(rep(1:3, each = 3)), x = rep(c("A", "B", "C"), each = 3))

m1 = svm(y ~ x, df)
df2 = data.frame(x = "B")

predict(m1, df2)
Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 
  contrasts can be applied only to factors with 2 or more levels
Kristofersen
  • 2,736
  • 1
  • 15
  • 31

1 Answers1

1

Just be sure to specify the levels in df2

library(e1071)
df = data.frame(y = c(rep(1:3, each = 3)), x = rep(c("A", "B", "C"), each = 3))

m1 = svm(y ~ x, df)
df2 = data.frame(x = factor("B",levels = c("A","B","C")))

predict(m1, df2)
shuckle
  • 221
  • 2
  • 7