scikit中的OCSVM:异常值的距离总是负的

时间:2017-04-17 02:17:14

标签: python python-3.x scikit-learn svm

我使用Scikit的一类SVM分类器OneClassSVM来确定数据集中的异常值。我的数据集有30000个样本,包含1024个变量。我将其中10%用作训练数据。

clf=svm.OneClassSVM(nu=0.001,kernel="rbf",gamma=1e-5)
clf.fit(trset)
dist2hptr=clf.decision_function(trset)
tr_y=clf.predict(trset)

如上所述,我使用decision_function(x)函数计算每个样本到决策函数的距离。当我比较预测结果和距离结果时,它总是显示预测输出中标记为+1的样本的正距离和标记为-1的样本的负距离值。

我认为距离没有标志,因为它没有处理方向。我想了解如何在OneClassSV scikit分类器中计算距离。符号是否仅表示样本位于SVM计算的决策超平面之外?

请帮忙。

1 个答案:

答案 0 :(得分:3)

sklearn's OneClassSVM是根据paper解释的here实施的:

  

BernhardSchölkopf,John C. Platt,John C. Shawe-Taylor,Alex J. Smola和Robert C. Williamson。 2001.估计对高维分布的支持。神经计算。 13,7(2001年7月),1443-1471。 DOI:https://doi.org/10.1162/089976601750264965

让我们看看那篇论文的摘要here

  

假设您获得了一些基础概率的数据集   分布P并且您想要估计输入的“简单”子集S.   空间使得从P绘制的测试点位于S之外的概率等于0和1之间的某个先验指定值。

     

我们提出了一种方法,通过尝试估计a来解决这个问题   函数f对S为正,对于补集为负

因此摘要定义了 OneClassSVM 的函数f,其后是sklearn。