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:异常值的距离始终为负的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法使用用户定义的距离度量来选择 scikits 学习中的 k 个最近邻居?
如何在 scikit 中使用具有半正弦距离的 DistanceMetrix.pairwise()