【发布时间】:2021-09-28 08:04:58
【问题描述】:
它来自液压系统的处理信号,从那里我知道红框中的点是系统发生故障时发生的异常情况。
我在 pycaret 和 H20 中都使用前 3k 条记录来训练模型。这 3k 条记录涵盖了 5 个数据周期,如下图所示:
要在 pycaret 中训练模型,我使用以下代码:
from pycaret.anomaly import *
from pycaret.datasets import get_data
import pandas as pd
exp_ano101 = setup(df[["Pressure_median_mw_2500_ac"]][0:3000], normalize = True,
session_id = 123)
iforest = create_model('iforest')
unseen_predictions = predict_model(iforest, data=df[["Pressure_median_mw_2500_ac"]])
unseen_predictions = unseen_predictions.reset_index()
我从pycaret得到的结果还不错:
通过一些后期处理,我可以得到以下结果,非常接近理想:
另一方面,使用 H20,代码如下:
import pandas as pd
from h2o.estimators import H2OIsolationForestEstimator, H2OGenericEstimator
import tempfile
ifr = H2OIsolationForestEstimator()
ifr.train(x="Pressure_median_mw_2500_ac",training_frame=hf)
th = df["mean_length"][0:3000].quantile(0.05)
df["anomaly"] = df["mean_length"].apply(lambda x: "1" if x> th else "0")
我明白了:
这是一个巨大的差异,因为它没有将此块检测为异常:
我的疑问是,鉴于我使用的是相同的算法,即隔离森林,我如何才能获得与从 pycaret 获得的结果相似的结果。即使在 Pycaret 中使用 SVM,我得到的结果也比在 H2O 中使用隔离森林更接近
【问题讨论】:
-
这是时间序列数据,还是这些独立样本中的每一个?
-
@JonNordby 它是时间序列,它来自一个周期性的工业过程
-
可能一些小的参数调整可能会让模型收敛。也只是检查一下,数据是否针对 H20 方法进行了标准化?
标签: python h2o anomaly-detection pycaret