一级svm是否提供概率估计?

时间:2016-12-21 15:30:22

标签: java machine-learning svm libsvm

我正在使用Libsvm进行异常检测(来自Java),但我需要的概率估算不仅仅是标签。我跟踪代码,发现这是不可能的。特别是,在函数svm_predict_values(..)中,我看到以下代码:

if(model.param.svm_type == svm_parameter.ONE_CLASS)
        return (sum>0)?1:-1;
else
        return sum;

据我所知,单类SVM会尝试估计某些概率分布对“正常”类中的样本或数据点的支持。给定一个新的数据点,并且假设模型已经学会了正常类分布的支持,我可以估计新数据点是“正常”还是异常值的概率?似乎这是不可能的,这就是为什么Libsvm对上述总和进行阈值处理并仅返回成员资格标签的原因,但我不明白为什么。如果有可能从一级svm得到一个概率估计,我花了很多时间阅读code后看不到如何在Libsvm中做到这一点。

我之所以这样溃败的原因是我不相信核密度估计在高维设置中会很好用,但也许svm容易出现同样的问题。

1 个答案:

答案 0 :(得分:1)

  

据我所知,单类SVM试图估算一些概率分布的支持,给出来自“正常”类的样本或数据点

问题是这句话对于SVM来说是假的。总的来说 - 是的,这将是构建分类器的一种很好的概率方法,由逻辑回归,神经网络和许多其他模型所采用。然而,SVM不是其中之一,没有对SVM进行适当的概率解释,它并没有真正构建概率分布,而是直接寻找一个好的决策规则。有更多的概率替代方案,例如相关向量机(RVM),但它们是非凸的。二进制SVM可以为您提供概率估计的唯一原因是因为在许多实现中存在一个小的“作弊”,起源于Platt,您只需在SVM之上拟合另一个概率模型 - 通常基于SVM投影的Logistic回归。

那么,你能做什么?您可以选择其他更概率的模型,或使用类似的作弊,并首先通过SVM投射数据(这是所提供的代码中的“总和”),然后在其上方放置Logistic回归,这将是您的概率估计。