scikit中的OCSVM:异常值的距离始终为负

Posted

技术标签:

【中文标题】scikit中的OCSVM:异常值的距离始终为负【英文标题】:OCSVM in scikit: distance of outlier is always negative 【发布时间】:2017-09-12 15:30:26 【问题描述】:

我正在使用来自 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】:

sklearn's OneClassSVM 由以下paper 实现,如here 所述:

Bernhard Schö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 之间的某个先验指定值。

我们提出了一种方法来解决这个问题,尝试估计一个 函数 f 在 S 上为正,在补码上为负

所以抽象定义了OneClassSVM的函数f,后面跟着sklearn。

【讨论】:

以上是关于scikit中的OCSVM:异常值的距离始终为负的主要内容,如果未能解决你的问题,请参考以下文章

为啥 scikit-skimage 示例中的距离图不显示?

有没有办法使用用户定义的距离度量来选择 scikits 学习中的 k 个最近邻居?

如何在 scikit 中使用具有半正弦距离的 DistanceMetrix.pairwise()

线程 QueueManagerThread 中的异常 - scikit-learn

scikit-learn 中的 DBSCAN(仅使用指标)

scikit-learn GMM 产生正对数概率