How to perform multi-class classification using 'svm' of e1071 package in R
Asked Answered
I

2

11

I want to perform multi-class classification using the svm function of e1071 package. But from what I came to know from the documentation of svm, it can only perform binary classification. The vignettes document tells this for multi-class classification: "To allow for multi-class classifi cation, libsvm uses the one-against-one technique by fitting all binary subclassi fiers and finding the correct class by a voting mechanism".
What I still don't understand is if we can perform the multi-class classification with svm of e1071 in R? If yes, please explain how we can do it over iris dataset.

Isoprene answered 25/2, 2014 at 9:30 Comment(3)
The very first example in help("svm") does exactly what you're after.Josephjosepha
@Josephjosepha yeah you are right about the example and I have seen it earlier. So, does it mean that the svm of e1071 can perform multi-class classification and not limited to binary classification? Does this function work the same way on the dataset with 10 output classes as iris has 3?Isoprene
Replied for similar question in another thread. Below is the link: https://mcmap.net/q/1014828/-how-to-build-multiclass-svm-in-rPuri
C
22

The iris dataset contains three class labels: "Iris setosa", "Iris virginica" and "Iris versicolor". To employ a balanced one-against-one classification strategy with svm, you could train three binary classifiers:

The first classifier's training set only contains the "Iris setosa" and "Iris virginica" instances. The second classifier's training set only contains the "Iris setosa" and the "Iris versicolor" instances. The third classifier's training set--I guess by now you'll know already--contains only the "Iris virginica" and the "Iris versicolor" instances.

To classify an unknown instance, you apply all three classifiers. A simple voting strategy could then select the most frequently assigned class label, a more sophisticated may also consider the svm confidence scores for each assigned class label.

Edit (This principle works out of the box with svm):

# install.packages( 'e1071' )
library( 'e1071' )
data( iris )
model <- svm( iris$Species~., iris )
res <- predict( model, newdata=iris )
Colligate answered 25/2, 2014 at 11:6 Comment(3)
that is a very nice way of approaching the problem. But, before going that far, I want to know if the svm of e1071 can directly perform this multi-class classification.Isoprene
the reason I'm asking is that, if I have a data with 10 output classes I need to model 10C2 (10 combination 2) = 45 such classifiers, which is a huge task.Isoprene
Ok :) So the short answer is yes, svm can also do multiclass classification and it works the same way as for binary (see edit in my answer).Colligate
C
1

R document says that "For multiclass-classification with k levels, k>2, libsvm uses the ‘one-against-one’-approach, in which k(k-1)/2 binary classifiers are trained; the appropriate class is found by a voting scheme."

Cressida answered 6/2, 2018 at 16:53 Comment(1)
Quoting the documentation doesn't really answer the question.Incensory

© 2022 - 2024 — McMap. All rights reserved.