我正在尝试为项目构建离线变化点检测,我想确保该算法仅检测高于特定阈值的点。
由于未知数量的变化点,我正在使用带有 Pelt 的破裂 python 包作为搜索方法。选择的成本函数是“rbf”。我的变化点不够准确,无法检测数据中的峰值。模型本身不会对检测点做出任何改变。由于我的数据很小 (n=45),所以我设置了 0.2 的随机惩罚。我尝试使用方法来计算惩罚, pen = p * log(len(data)) 但由于我的数据集很小,所以我运气不佳。
arr_cols = np.array(data['MDAPE'])
algo = rpt.Pelt(model="rbf").fit(arr_cols)
result = algo.predict(pen=0.2)
rpt.display(arr_cols, result, figsize=(10, 6))
plt.title('Change Point Detection: Pelt Search Method')
plt.show()
这个想法是仅检测高于中值绝对预测误差 (MDAPE) 一定水平的点。
我建议在破裂和roerich库中使用基于滑动窗口的变化点检测算法。它们具有对检测质量有很大影响的窗口大小超参数。如果其最佳值未知,您可以使用具有不同窗口大小的算法集合。在 Medium 上查看该集成的示例,使用 roerich 进行变化点检测。
这些方法的另一个优点是提供了变化点检测分数,您可以使用它来估计任务的最佳阈值。