对于 中的分类任务kernlab::ksvm
,默认使用的 SVM 是 C-svm (LIBSVM, Chang & Lin),它计算一个二元分类任务。这可以通过计算多个 1 与多个二元分类器并聚合结果来扩展到多类问题。通过 spoc-svm (Crammer, Singer) 和 kbb-svm (Weston, Watkins) 支持原生多类分类。
这些是kernlab
通过type
参数 in支持的ksvm
(参见?kernlab::ksvm
):
ksvm(..., type= "C-svc", ...)
ksvm(..., type= "spoc-svc", ...)
ksvm(..., type= "kbb-svc", ...)
然而,预测概率只能通过 C-svm 获得。为什么?这是实施中的错误吗?
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.
文档没有说明这一点,也没有提供任何指导。如您所见,参数prob.model
已在函数调用中指定。至少,这似乎是一个有问题的错误消息。