【问题标题】:Trying to understand isolation forest algorithm试图理解隔离森林算法
【发布时间】:2016-12-12 22:56:50
【问题描述】:

我正在尝试将isolation forest algorithm 与 Python scikit-learn 一起使用。

我不明白为什么我必须生成集合 X_testX_outliers,因为当我获取数据时,我不知道其中是否存在异常值。但也许这只是一个例子,我不必为每个案例生成和填充这些集合。我认为隔离林不必接收干净的X_train(没有异常值)。

我误解了算法吗?我是否必须使用其他算法(我考虑过一类 SVM,但它的X_train 必须尽可能干净)?

隔离森林算法是无监督算法还是有监督算法(如随机森林算法)?

【问题讨论】:

    标签: python algorithm scikit-learn


    【解决方案1】:

    “隔离森林算法是无监督算法还是有监督算法(如随机森林算法)?”

    隔离树是一种无监督算法,因此它不需要标签来识别异常值/异常。它遵循以下步骤:

    1. 对数据进行随机和递归分区,表示为一棵树(随机森林)。这是训练阶段,用户定义子样本的参数和树的数量。作者 (Liu and Ting, 2008) 建议子样本和 100 棵树的默认值是 256。随着树的数量增加,达到收敛。但是,可能需要根据具体情况进行微调。

    1. 一旦数据的递归分区完成,就会到达树的末尾。预计到达异常值所需的距离远小于正常数据(见图)。

    2. 对路径的距离进行平均和归一化以计算异常分数。异常值 1 被认为是异常值,接近 0 的值被认为是正常的。

    异常值的判断是根据分数进行的。不需要标签列。因此,它是一种无监督算法。

    【讨论】:

      【解决方案2】:

      问题

      我不明白为什么我必须生成集合 X_testX_outliers,因为当我获取数据时,我不知道其中是否存在异常值。

      回答

      您不必生成X_outliers。这只是向您展示隔离森林可以检测异常值的示例。这个数据集是随机的。与原始数据无关。

      您需要做的只是将您的IsolationForest 拟合到您的训练数据中。然后,如果需要,检查测试集 - 作为预处理步骤 - 如果有一些异常值。

      【讨论】:

      • 能否请您解释一下隔离森林中的污染参数必须如何使用?
      • 隔离树的原始输出是分数,而不是标签。污染参数是用于截断排序分数的异常值的比例。
      【解决方案3】:

      隔离林和 dbscan 方法是非参数结构的主要方法之一。隔离森林方法的优点是不需要事先进行缩放,但它不能处理缺失值。所以你必须处理它。

      preds = iso.fit_predict(train_nan_dropped_for_isoF)
      

      请记住,.fit_predict() 不会用于测试数据。只是.predict()

      我该如何解决这个问题?

      【讨论】:

        猜你喜欢
        • 2015-07-16
        • 1970-01-01
        • 1970-01-01
        • 2018-09-10
        • 2019-07-11
        • 2019-06-29
        • 2020-11-16
        • 2014-12-28
        • 2019-08-02
        相关资源
        最近更新 更多