0

我正在尝试检测某些数据中的异常情况。我有正常数据和被认为异常的数据。

我在 python 中使用来自 scikit-learn 库的隔离森林。我已经从正常数据创建了一个模型,如下所示:

model = IsolationForest(n_estimators=100, contamination=0.002)
model.fit(new_features)

当我尝试进行预测时:

predicted = model.predict(transformed_anomaly)

它工作正常。36 个中有 35 个被检测为异常。

如果我这样做:

for anomaly in transformed_anomaly:
   predicted = model.predict(anomaly.reshape(1,-1))

突然间,所有点都被归类为内点。

我检查了'anomaly.reshape(1,-1)'的形状,它是 (1, 2)。'transformed_anomaly'的形状是 (36,2)

有人可以指出它的问题吗?

4

2 回答 2

0

在隔离森林中传递 random_state= 0 以在每次运行时获得相同的结果。模型 = IsolationForest(n_estimators=100, 污染=0.002,,random_state= 0)

于 2020-02-11T23:02:40.263 回答
0

我还有一个解决方案 - 为什么不像这样修复种子值。

# Set a seed value
seed_value= 123

# 1. Set `PYTHONHASHSEED` environment variable at a fixed value
import os
os.environ['PYTHONHASHSEED']=str(seed_value)

# 2. Set `python` built-in pseudo-random generator at a fixed value
import random
random.seed(seed_value)

# 3. Set `numpy` pseudo-random generator at a fixed value
import numpy as np
np.random.seed(seed_value)

这将帮助您在相同的数据上每次都获得相同的结果,因为它消除了模型中的随机性。

于 2021-01-11T21:46:12.830 回答