kernlab::ksvm 中的概率模型
probability model in kernlab::ksvm
对于kernlab::ksvm
中的分类任务,默认使用的SVM是C-svm(LIBSVM,Chang & Lin),计算二元分类任务。这可以通过计算多个 1 与多个二元分类器并聚合结果来扩展到多类问题。通过 spoc-svm(Crammer、Singer)和 kbb-svm(Weston、Watkins)支持原生多类分类。
kernlab
通过 ksvm
中的 type
参数支持这些(参见 ?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
。至少,这似乎是一条有问题的错误消息。
kernlab
目前不支持 C-svc
、nu-svc
和 C-bsvc
(check the code)以外的类型的概率估计。
if(type == "probabilities")
{
if(is.null(prob.model(object)[[1]]))
stop("ksvm object contains no probability model. Make sure you set the paramater prob.model in ksvm during training.")
if(type(object)=="C-svc"||type(object)=="nu-svc"||type(object)=="C-bsvc")
{
[...]
}
else
stop("probability estimates only supported for C-svc, C-bsvc and nu-svc")
}
问题是原生多类解决方案缺少作为输入 couple
的二元概率。实际上,编写自己的解决方案并不难。
对于kernlab::ksvm
中的分类任务,默认使用的SVM是C-svm(LIBSVM,Chang & Lin),计算二元分类任务。这可以通过计算多个 1 与多个二元分类器并聚合结果来扩展到多类问题。通过 spoc-svm(Crammer、Singer)和 kbb-svm(Weston、Watkins)支持原生多类分类。
kernlab
通过 ksvm
中的 type
参数支持这些(参见 ?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
。至少,这似乎是一条有问题的错误消息。
kernlab
目前不支持 C-svc
、nu-svc
和 C-bsvc
(check the code)以外的类型的概率估计。
if(type == "probabilities")
{
if(is.null(prob.model(object)[[1]]))
stop("ksvm object contains no probability model. Make sure you set the paramater prob.model in ksvm during training.")
if(type(object)=="C-svc"||type(object)=="nu-svc"||type(object)=="C-bsvc")
{
[...]
}
else
stop("probability estimates only supported for C-svc, C-bsvc and nu-svc")
}
问题是原生多类解决方案缺少作为输入 couple
的二元概率。实际上,编写自己的解决方案并不难。