For classification tasks in kernlab::ksvm
, the default SVM used is C-svm (LIBSVM, Chang & Lin), which calculates a binary classification task. This can be extended to multiclass problems by calculating multiple 1 vs many binary classifiers and aggregating the results. Native multiclass classification is supported via spoc-svm (Crammer, Singer) and via kbb-svm (Weston, Watkins).
These are supported in kernlab
via the type
parameter in ksvm
(see ?kernlab::ksvm
):
ksvm(..., type= "C-svc", ...)
ksvm(..., type= "spoc-svc", ...)
ksvm(..., type= "kbb-svc", ...)
However, prediction probabilities are only available via C-svm. Why? Is this an error in the implementation?
library(kernlab)
data(iris)
# default - C-svc allows for a prob.model
k1 <- ksvm(Species ~. ,data= iris,
type= "C-svc",
prob.model=TRUE,
kernel= "rbfdot", C= 1)
p1 <- predict(k1, iris, type= "probabilities") # works
#### non default, doesn't work:
k1 <- ksvm(Species ~. ,data= iris,
type= "spoc-svc",
prob.model=TRUE,
kernel= "rbfdot", C= 1)
p1 <- predict(k1, iris, type= "probabilities")
Error in .local(object, ...) :
ksvm object contains no probability model. Make sure you set the paramater prob.model in ksvm during training.
k1 <- ksvm(Species ~. ,data= iris,
type= "kbb-svc",
prob.model=TRUE,
kernel= "rbfdot", C= 1)
p1 <- predict(k1, iris, type= "probabilities")
Error in .local(object, ...) :
ksvm object contains no probability model. Make sure you set the paramater prob.model in ksvm during training.
The documentation does not note this or provide any guidelines. As you can see, the parameter prob.model
has been specified in the function call. At a minimum, this appears to be a problematic error message.