one-class svm 是否提供概率估计?

Does one-class svm provide a probability estimate?

我正在使用 Libsvm 进行离群值检测(来自 Java),但我需要概率估计而不仅仅是标签。我追查了代码,发现这是不可能的。特别是,在函数 svm_predict_values(..) 中,我看到以下代码:

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

我理解 one-class SVM 试图估计来自 "normal" class 的给定样本或数据点的某些概率分布的支持度。给定一个新数据点,并且假设模型已经学习了正态 class 分布的支持,我能否得到一个新数据点是 "normal" 或异常值的概率估计值?这似乎是不可能的,这就是为什么 Libsvm 将上面的总和设为阈值并且 returns 只是一个成员标签,但我不明白为什么。如果有可能从 one-class svm 中获得概率估计,我在花了很多时间阅读 code.

之后看不出如何在 Libsvm 中做到这一点

我失败的原因是我不相信核密度估计在高维环境下会很好地工作,但也许 svm 容易出现同样的问题。

I understand that one-class SVM tries to estimate the support of some probability distribution given samples or data points from the "normal" class

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

那么,你能做什么?您可以选择其他更具概率性的模型,或使用类似的作弊方法,并首先通过 SVM 投影数据(这是提供的代码中 "sum" 的内容),然后在其之上进行逻辑回归,这将是你的概率估计。