kernlab中的概率模型:: ksvm

时间:2015-12-16 22:10:30

标签: r svm kernlab

对于kernlab::ksvm中的分类任务,使用的默认SVM是C-svm(LIBSVM,Chang& Lin),它计算二进制分类任务。通过计算多个1对多个二进制分类器并聚合结果,可以将其扩展为多类问题。通过spoc-svm(Crammer,Singer)和kbb-svm(Weston,Watkins)支持原生多类分类。

kernlab通过type中的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。至少,这似乎是一个有问题的错误消息。

1 个答案:

答案 0 :(得分:0)

kernlab目前不支持C-svcnu-svcC-bsvccheck 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输入的二进制概率。实际上,编写自己的解决方案并不会那么难。