SVM predict on dataframe with different factor lev

2019-03-04 18:18发布

问题:

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

回答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)


标签: r predict