【问题标题】:Confused about sklearn’s implementation of OSVM对 sklearn 的 OSVM 实现感到困惑
【发布时间】:2018-09-27 04:12:43
【问题描述】:

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

我为这些愚蠢的问题道歉但我对两件事有点困惑:

  1. 我应该同时针对常规示例和异常值训练我的 svm,还是仅针对常规示例进行训练?

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

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

【问题讨论】:

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


    【解决方案1】:

    您引用的这个例子是关于新奇检测,docs 说:

    新奇检测:

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

    意思:你应该只训练常规例子。

    该方法基于:

    Schölkopf、Bernhard 等人。 “估计高维分布的支持。”神经计算 13.7 (2001): 1443-1471。

    摘录:

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

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

    上面的文档还说:

    内部点标记为 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  
    

    【讨论】:

      猜你喜欢
      • 2019-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多