它来自液压系统的处理信号,从那里我知道红框中的点是系统发生故障时发生的异常情况。
我正在使用前 3k 条记录来训练模型,包括 pycaret 和 H20。这 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 中使用隔离森林更接近