我使用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计算的决策超平面之外?
请帮忙。
答案 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。