gpt4 book ai didi

python - 隔离林需要拆分数据吗?

转载 作者:行者123 更新时间:2023-12-03 14:32:35 25 4
gpt4 key购买 nike

我有一个由 10049972 行 x 19 列组成的数据库。我使用隔离森林来检测异常值,然后创建了一个额外的列,将异常值设置为 -1,我删除了所有包含异常值的行为 -1,然后删除了该列。

我的问题是:我是否需要训练、测试和验证隔离森林才能工作?另外有人可以确认我的代码是否有效吗?

这是我的代码。

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

%matplotlib inline

from sklearn.ensemble import IsolationForest


df = pd.read_csv('D:\\Project\\database\\4-Final\\Final After.csv',low_memory=True)


iForest = IsolationForest(n_estimators=100, contamination=0.1 , random_state=42, max_samples=200)


iForest.fit(df.values.reshape(-1,1))

pred = iForest.predict(df.values.reshape(-1,1))

pred=df['anomaly']

df=df.drop(df['anomaly'==-1],inplace=True)

df.to_csv('D:\\Project\\database\\4-Final\\IF TEST.csv', index=False)

谢谢你。

最佳答案

My question is do I need to do test train and validate for isolation forest to work?



您只想在这个批处理文件中检测异常值,对吗? 在这种情况下,您的解决方案可能没问题, 但在大多数情况下,您必须拆分。

但是,请尝试了解您何时需要进行拆分。
为了解释这一点,让我们进入一个真实的案例场景。

假设您正在尝试预测不同引擎的异常行为。您使用数据库中可用的数据创建一个模型,直到“今天”,并开始预测传入的数据。有可能预测的数据不等于用于训练的数据,对吧?那么,在配置模型时如何模拟这种情况呢?使用训练-测试-验证并使用正确的指标进行评估。

编辑:让我添加一个例子。我会尽量让它变得 super 简单。

如果您的引擎数据库数据是:
+----+-------------+--------------+
| id | engine_type | engine_value |
+----+-------------+--------------+
| 1 | 0 | 0.25 |
| 2 | 0 | 0.40 |
| 3 | 1 | 0.16 |
| 4 | 1 | 0.30 |
| 5 | 0 | 5.3 | <- anomaly
| 6 | 1 | 14.4 | <- anomaly
| 7 | 0 | 16.30 | <- anomaly
+----+-------------+--------------+

并用这一切来训练模型,模型会用三个异常值来训练,对吧?该算法将使用这 3 个异常值创建森林,因此模型可以更轻松地预测它们。

现在,这些生产数据会发生什么:
+----+-------------+--------------+
| id | engine_type | engine_value |
+----+-------------+--------------+
| 8 | 1 | 3.25 | <- anomaly
| 9 | 1 | 4.40 | <- anomaly
| 10 | 0 | 2.16 |
+----+-------------+--------------+

你将它传递给你的模型,它说这些点不是异常的,而是正常的数据,因为它认为你的“阈值”是大于 5 的值。

这个“阈值”是算法超参数的产物,也许使用其他配置,模型可以预测值异常,但您没有测试模型 概括 .

那么如何改进这个配置呢?拆分您当时可用的数据。您可以只使用其中的一部分进行训练并使用另一部分进行测试,而不是使用所有数据库数据进行训练,例如将此部分用作训练数据:
+----+-------------+--------------+
| id | engine_type | engine_value |
+----+-------------+--------------+
| 1 | 0 | 0.25 |
| 2 | 0 | 0.40 |
| 3 | 1 | 0.16 |
| 4 | 1 | 0.30 |
| 7 | 0 | 16.30 | <- anomaly
+----+-------------+--------------+

这作为测试数据:
+----+-------------+--------------+
| id | engine_type | engine_value |
+----+-------------+--------------+
| 5 | 0 | 5.3 | <- anomaly
| 6 | 1 | 14.4 | <- anomaly
+----+-------------+--------------+

并设置一组超参数,使该算法正确预测测试数据。它是否确保 future 的预测是完美的?不,它不是,但这与仅拟合数据而不评估模型的泛化能力不同。

Also can someone please confirm if my code is valid?



是的,但让我添加一个建议,改变这一点:
iForest.fit(df.values.reshape(-1,1))

pred = iForest.predict(df.values.reshape(-1,1))

pred=df['anomaly']

对此:
df['anomaly'] = iForest.fit_predict(df.values.reshape(-1,1))

另外,如果您使用的是新的 Pandas 版本,请使用:
df['anomaly'] = iForest.fit_predict(df.to_numpy().reshape(-1,1))

关于python - 隔离林需要拆分数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60200665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com