Scikit learn 使用scikit learn OneClassSVM时,获取每个新观测值作为异常值的概率

Scikit learn 使用scikit learn OneClassSVM时,获取每个新观测值作为异常值的概率,scikit-learn,svm,Scikit Learn,Svm,我对scikit和SVM方法都是新手。为了检测异常值,我的数据集与scikit learn OneClassSVM配合得很好;我使用观察训练OneClassSVM,所有这些都是“内联线”,然后使用predict()在我的测试数据集上生成二进制内联线/离群线预测 然而,为了继续我的分析,我想得到与测试集中每个新观察相关的概率。例如,成为与每次新观测相关的异常值的概率。我注意到scikit learn中的其他分类方法提供了通过参数probability=True来计算这一点的能力,但OneClass

我对scikit和SVM方法都是新手。为了检测异常值,我的数据集与scikit learn OneClassSVM配合得很好;我使用观察训练OneClassSVM,所有这些都是“内联线”,然后使用predict()在我的测试数据集上生成二进制内联线/离群线预测


然而,为了继续我的分析,我想得到与测试集中每个新观察相关的概率。例如,成为与每次新观测相关的异常值的概率。我注意到scikit learn中的其他分类方法提供了通过参数probability=True来计算这一点的能力,但OneClassSVM不提供这一点。有没有一种简单的方法可以得到这些结果

在进入本页之前,我一直在为你的同一个问题寻找答案。由于scikit learn的OneClassSVM是基于前面提到的LIBSVM实现的,所以我又回去检查了原始的LIBSVM包

最后,他们对用于激活某些SVM变量返回概率输出分数的选项'-b'说明如下: -b概率估计:是否为概率估计训练SVC或SVR模型,0或1(默认为0) 换句话说,SVM类型的一类SVM(既不是SVC也不是SVR)没有用于概率估计的实现

如果我尝试使用LIBSVM的命令行界面强制此选项(即-b),例如: ./svm序列-S2-T2-B1心音标度

我收到以下错误消息: 错误:尚不支持一类SVM概率输出


总之,LIBSVM还不支持这一非常理想的输出,因此,scikit learn暂时不提供它。我希望在不久的将来,他们会激活此功能并更新此处的线程。

它提供决策函数分数,理论上是正常和异常之间的边际决策边界距离。支持向量机进行无监督分类。这意味着算法内部的异常是根据到原点的距离定义的(引用自NIPS的Scholkopf论文)

TLDR:使用

clf.decision_function(samples) * (-1)

作为分数。你会得到分数的稀疏分布。

嗨,我知道这是一个老问题,但我想你一定已经解决了这个问题或找到了解决办法,我基本上停留在3年前的同一点上,我需要计算AUC-ROC的概率,我也发布了这个堆栈溢出问题