如何使用隔离森林

我在尝试检测数据集中的异常值时,发现了sklearn的隔离森林。我无法理解如何使用它。我将训练数据拟合进去,它返回了一个包含-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]

回答:

看起来你有很多问题,让我尽我所知,一一回答它们。

它是如何工作的?

它之所以有效,是因为任何数据集中异常值的本质是“少而不同”,这与典型的基于聚类或基于距离的算法大不相同。从最高层面来看,它的工作逻辑是,异常值与数据集中的“正常”点相比,需要更少的步骤来“隔离”。为此,IF所做的是:假设你有一个包含n个数据点的训练数据集X,每个数据点有m个特征。在训练过程中,IF为不同特征创建隔离树(二叉搜索树)。

在训练阶段,你有三个参数可以在训练阶段进行调整:

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

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

测试阶段:

  • sklearn_IF 查找测试数据点在所有训练过的隔离树中的路径长度,并计算平均路径长度。路径长度越长,点越正常,反之亦然。

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

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

调整参数

训练 -> n_estimators, max_samples, max_features

测试 -> contamination

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注