隔离森林在预测一个点而不是全部点时会给出不同的结果

时间:2017-10-18 16:00:37

标签: python scikit-learn outliers isolation anomaly-detection

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

我在python中使用来自scikit-learn库的Isolation Forest。我已经从正常数据中创建了一个模型:

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)。 < transform_anomaly' 的形状是(36,2)

有人能用它来指出问题吗?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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)

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