对sklearn的OSVM实现感到困惑

时间:2018-04-17 09:03:10

标签: machine-learning scikit-learn svm libsvm sklearn-pandas

我最近开始尝试使用OneClassSVM(使用Sklearn)进行无监督学习,然后我跟进了 this example

我为愚蠢的问题道歉但是我对两件事感到有些困惑:

  1. 我是否应该针对常规案例和异常值训练我的svm,或者仅针对常规示例进行培训?

  2. OSVM预测的哪些标签代表异常值是1还是-1

  3. 我再次为这些问题道歉,但由于某种原因,我找不到这个记录的任何软件

1 个答案:

答案 0 :(得分:1)

正如您所引用的示例是关于新颖性检测docs说:

  

新奇检测:

     

训练数据不受异常值的污染,我们有兴趣检测新观察中的异常。

含义:你应该只训练常规例子。

该方法基于:

  

Schölkopf,Bernhard,et al。 “估计对高维分布的支持。”神经计算13.7(2001):1443-1471。

提取物:

  

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

     

我们提出了一种方法来解决这个问题,试图估计一个函数f,它对S是正的,对补集是负的。

以上文档也说:

  

内点标记为1,而异常值标记为-1。

这也可以在您的示例代码中看到,提取:

# Generate some regular novel observations
X = 0.3 * np.random.randn(20, 2)
X_test = np.r_[X + 2, X - 2]
...
# all regular = inliers (defined above)
y_pred_test = clf.predict(X_test)  
...
# -1 = outlier <-> error as assumed to be inlier
n_error_test = y_pred_test[y_pred_test == -1].size