尝试理解孤立森林算法

9
我正在尝试使用Python scikit-learn中的隔离森林算法。 我不明白为什么必须生成X_testX_outliers,因为当我获得数据时,我不知道其中是否有异常值。但也许这只是一个例子,并不需要为每种情况生成和填充那些集合。我认为隔离森林不必接收干净的X_train(没有异常值)。我是否误解了该算法?我是否需要使用其他算法(我想到一类支持向量机,但其X_train必须尽可能干净)?隔离森林算法是无监督算法还是监督算法(如随机森林算法)?
3个回答

12

孤立森林算法是一种无监督算法还是类似于随机森林算法的监督算法?

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

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

image

  1. 当数据的递归分割完成时,树的末端就被到达了。预期取到离群点的距离要比正常数据小得多(见图)。

  2. 路径的距离被平均并规范化以计算异常分数。1的异常分数被认为是一个离群值,接近0的值被认为是正常值。

基于得分进行离群值的判断。不需要标签列,因此它是一种无监督算法。


8
问题:

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

答案:

你没有必要生成X_outliers数据集。这只是一个例子,用来展示孤立森林算法可以检测到异常值。这个数据集是随机生成的,与原始数据无关。

你需要做的只是将IsolationForest算法拟合到训练数据上。然后,如果需要,在测试集中进行预处理以检查是否存在异常值。


请问您能否简单解释一下孤立森林中的污染参数应该如何使用? - user1274878
孤立树的原始输出是分数,而不是标签。污染参数是用于截断排序分数的异常值比例。 - Fan Wang

0

孤立森林和DBSCAN方法是非参数结构中突出的方法之一。孤立森林方法的优点在于无需事先进行缩放,但它无法处理缺失值。因此,您必须处理它。

preds = iso.fit_predict(train_nan_dropped_for_isoF)

记住,.fit_predict() 不会用于测试数据,只需使用 .predict()

我该如何解决这个问题?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接