must a dataset contain all factors in SVM in R

776 views Asked by At

I'm trying to find class probabilities of new input vectors with support vector machines in R. Training the model shows no errors.

fit <-svm(device~.,data=dataframetrain,
    kernel="polynomial",probability=TRUE)

But predicting some input vector shows some errors.

predict(fit,dataframetest,probability=prob)
Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 
contrasts can be applied only to factors with 2 or more levels

dataframetrain looks like:

> str(dataframetrain)
'data.frame':   24577 obs. of  5 variables:
 $ device   : Factor w/ 3 levels "mob","pc","tab": 1 1 1 1 1 1 1 1 1 1 ...
 $ geslacht : Factor w/ 2 levels "M","V": 1 1 1 1 1 1 1 1 1 1 ...
 $ leeftijd : num  77 67 67 66 64 64 63 61 61 58 ...
 $ invultijd: num  12 12 12 12 12 12 12 12 12 12 ...
 $ type     : Factor w/ 8 levels "A","B","C","D",..: 5 5 5 5 5 5 5 5 5 5 ...

and dataframetest looks like:

> str(dataframetest)
'data.frame':   8 obs. of  4 variables:
 $ geslacht : Factor w/ 1 level "M": 1 1 1 1 1 1 1 1
 $ leeftijd : num  20 60 30 25 36 52 145 25
 $ invultijd: num  6 12 2 5 6 8 69 7
 $ type     : Factor w/ 8 levels "A","B","C","D",..: 1 2 3 4 5 6 7 8

I trained the model with 2 factors for 'geslacht' but sometime I have to predict data with only 1 factor of 'geslacht'. Is it maybe possible that the class probabilites can be predicted with a test set with only 1 factor of 'geslacht'?

I hope someone can help me!!

1

There are 1 answers

0
Roman Luštrik On BEST ANSWER

Add another level (but not data) to geslacht.

x <- factor(c("A", "A"), levels = c("A", "B"))
x
[1] A A
Levels: A B

or

x <- factor(c("A", "A"))
levels(x) <- c("A", "B")
x
[1] A A
Levels: A B