我使用Libsvm進行離羣點檢測(來自Java),但我需要的不是標籤的概率估計。我追溯了代碼,發現這是不可能的。特別是,在功能svm_predict_values(..)我看到以下代碼:單級svm是否提供概率估計?
if(model.param.svm_type == svm_parameter.ONE_CLASS)
return (sum>0)?1:-1;
else
return sum;
據我所知,一個類SVM嘗試從「正常」估計一些概率分佈給定樣本或數據點的支持類。給定一個新的數據點,並且假定模型已經學會了正常類分佈的支持,我可以估計新數據點是「正常」還是異常值?的概率。看來這是不可能的,這就是爲什麼Libsvm限制上述總和並只返回一個會員標籤,但我不明白爲什麼。如果可以從一個級別的svm獲得概率估計值,那麼在花費大量時間閱讀code後,我不會在Libsvm中看到如何做到這一點。
我走這個路線的原因是我不認爲核密度估計在高維設置中會工作得很好,但是也許svm很容易出現同樣的問題。
好的,但libsvm提供了這個「作弊」的多類svm。所以問題是爲什麼沒有提供一流的svm? – Kai
沒有在單類SVM中不使用它的數學原因,所以爲什麼它沒有實現?一個原因可能是這樣的事實,通常在一個類別中,分類概率估計是關於提供P(x | positive),而不是P(positive | x)(Platt縮放「欺騙」給你),並且沒有好方法在這些量之間進行轉換(因爲一類SVM不具有P(x)的模型)。但更可能的原因是「沒有足夠的人要求它」,因爲一類SVM是libsvm的一個小部分。 – lejlot
好的,這是一個很好的答案。謝謝。在我的應用程序中,我實際上需要p(positive | x),所以如果爲libsvm提供了增強的Platt估計值(如果它是爲一個類提供的),那麼它將是完美的。但我確實找到了解決方法,這可能是答案。發現參數nu實質上是拒絕的訓練樣例比例的上限。因此,與那些被拒絕的訓練樣例(即使它們屬於正類)相比,新的測試點必須「接近」到「正常」或正面。這不完全是一個校準概率,但可以代替p(positive | x)。 – Kai