试图了解隔离森林算法

时间:2016-12-12 22:56:50

标签: python algorithm scikit-learn

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

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

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

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

3 个答案:

答案 0 :(得分:3)

问题

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

回答

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

您需要做的只是使IsolationForest适合您的训练数据。如果你愿意,可以检查测试集 - 作为预处理步骤 - 如果有一些异常值。

答案 1 :(得分:3)

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

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

  1. 执行数据的随机和递归分区,其表示为树(随机森林)。这是训练阶段,用户定义子样本的参数和树的数量。作者(Liu和Ting,2008)建议子样本和100棵树的默认值为256。树的数量增加时达到收敛。但是,在案例的基础上可能需要进行微调。
  2. image

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

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

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

答案 2 :(得分:0)

隔离林和dbscan方法是非参数结构的主要方法。隔离林方法的优点是无需事先缩放,但无法处理缺少的值。所以您必须处理它。

preds = iso.fit_predict(train_nan_dropped_for_isoF)

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

我该如何解决问题?