如何使用隔离fore

2024-04-29 09:38:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图检测数据集的异常值,并找到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]

Tags: 数据代码test参数trainsklearn向量predict
1条回答
网友
1楼 · 发布于 2024-04-29 09:38:55

看来你有很多问题,让我尽我所能一个一个地回答。 -它是怎么工作的?->;它的工作原理是,任何数据集中的离群值的性质都是“少而不同”的,这与典型的基于聚类或基于距离的算法有很大不同。在顶层,它处理的逻辑是,与任何数据集中的“正常”点相比,离群值“隔离”的步骤更少。 要做到这一点,假设您有一个训练数据集Xn数据点,每个数据点都具有m特征。在训练中,IF为不同的特征创建隔离树(二进制搜索树)。对于训练,您有3个参数用于调整,一个是隔离树的数目(sklearn_IsolationForest中的“n_估计器”),第二个是样本的数目(sklearn_IsolationForest中的“max_samples”),第三个是从X中提取的用于训练每个基本估计器的特征数目(sklearn_IF中的“max_features”)max_sample'是它将从原始数据集中选取的用于创建隔离树的随机样本数。

在测试阶段,它从所有经过训练的隔离树中找出被测数据点的路径长度,并找出平均路径长度。路径长度越高,点越正常,反之亦然。基于平均路径长度。它计算异常得分,sklearn_的decision_函数可以用来得到这个值。对于sklearn_IF,分数越低,样本越反常。根据异常得分,您可以通过在sklearn_IF object中设置适当的污染值来确定给定样本是否异常。污染的默认值是0.1,您可以调整该值以确定阈值。数据集的污染量,即数据集中异常值的比例。

调整参数 培训->;1。n_估计,2。max_示例,3.max_功能。 测试->;1。污染

网友
2楼 · 发布于 2024-04-29 09:38:55

让我补充一点,当我读到这个问题时,我有点吃力。

大多数情况下,您使用它进行二进制分类(我假设),其中您有一个大多数类0和一个离群类1。对于exmaple,如果您想detect fraud,那么您的主要类是non-fraud(0)和fraud(1)。

现在如果你有一个训练和测试分离:X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

然后你跑:

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

“正常”分类器评分的输出可能非常混乱。如前所述,y_pred_test将由[-1,1]组成,其中1是大多数类0,-1是次要类1。所以我建议你把它改成:

y_pred_test = np.where(y_pred_test == 1, 0, 1)

然后你可以使用你的正常评分功能等

网友
3楼 · 发布于 2024-04-29 09:38:55

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

相关问题 更多 >