如何使用隔离林

新手上路,请多包涵

我正在尝试检测我的数据集的异常值,我找到了 sklearn 的 Isolation Forest 。我不明白如何使用它。我将我的训练数据放入其中,它返回一个具有 -1 和 1 值的向量。

任何人都可以向我解释它是如何工作的并提供一个例子吗?

我怎么知道异常值是“真正的”异常值?

调整参数?

这是我的代码:

 clf = IsolationForest(max_samples=10000, random_state=10)
clf.fit(x_train)
y_pred_train = clf.predict(x_train)
y_pred_test = clf.predict(x_test)

[1 1 1 ..., -1 1 1]

原文由 dapo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 542
2 个回答

看来你有很多问题,让我尽量一一回答。

怎么运行的?

它之所以起作用,是因为任何数据集中异常值的性质,即异常值,都是 少数且不同 的,这与典型的基于聚类或基于距离的算法有很大不同。在顶层,它的工作逻辑是,与任何数据集中的“正常”点相比,异常值“隔离”的步骤更少。为此,这就是 IF 所做的;假设您有包含 n 个 数据点的训练数据集 X ,每个数据点具有 m 个特征。在训练中,IF 为不同的特征创建隔离树(二叉搜索树)。

对于训练,您有 3 个参数用于在 训练 阶段进行调整:

  1. 隔离树的数量( n_estimators 在sklearn_IsolationForest中)
  2. 样本数( max_samples 在sklearn_IsolationForest中)
  3. 从 X 中提取以训练每个基本估计器的特征数(sklearn_IF 中的 max_features )。

max_samples 是它将从原始数据集中选取的随机样本数,用于创建隔离树。

测试 阶段:

  • sklearn_IF 从所有经过训练的隔离树中找到被测数据点的路径长度,并找到平均路径长度。路径长度越大,点越正常,反之亦然。

  • 基于平均路径长度。它计算异常分数,可以使用 sklearn_IF 的 decision_function 来获得它。对于 sklearn_IF,分数越低,样本越异常。

  • 根据异常分数,您可以通过在 sklearn_IF 对象中设置 contamination 的适当值来确定给定样本是否异常。 contamination 的默认值为 0.1,您可以对其进行调整以确定阈值。数据集的污染量,即数据集中异常值的比例。

调整参数

培训 -> n_estimatorsmax_samplesmax_features

测试 -> contamination

原文由 Bhargav Upadhyay 发布,翻译遵循 CC BY-SA 4.0 许可协议

-1 代表异常值(根据拟合模型)。请参阅 IsolationForest 示例 以获得对该过程的很好描述。如果您有一些先验知识,您可以提供更多参数以获得更准确的拟合。例如,如果您知道污染(数据集中离群值的比例),您可以将其作为输入提供。默认情况下,假定为 0.1。请参阅 此处 的参数说明。

原文由 Miriam Farber 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏