2015-12-16 94 views
3

對於kernlab::ksvm中的分類任務,使用的默認SVM是C-svm(LIBSVM,Chang & Lin),它計算二進制分類任務。這可以通過計算多個1和多個二進制分類器並彙總結果來擴展到多類問題。本地多類別分類通過spoc-svm(Crammer,Singer)和kbb-svm(Weston,Watkins)支持。kernlab中的概率模型:: ksvm

這些在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已在函數調用中指定。至少,這似乎是一個有問題的錯誤消息。

回答

0

kernlab目前不支持除C-svc,nu-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。實際上,編寫你自己的解決方案並不會那麼困難。