是否有 ML 或 DL 工具可以学习检测一维时间序列中周期性发生的模式?

机器算法验证 机器学习 时间序列 神经网络 分类
2022-03-17 08:09:41

我正在尝试创建一个标记冰箱温度读数的工具。每 5 分钟读取一次读数,其标签标识是否在冰箱除霜时读取。冰箱会定期除霜,这意味着加热器会打开,导致温度升高。除霜的高度、持续时间和形状差异很大。唯一一致的是它们以恒定的时间间隔发生(例如每 3 小时)。在正常运行期间(当冰箱不除霜时),冰箱的温度会随着压缩机的开启和关闭以及门的打开和关闭而反弹。下图显示了温度读数时间序列的示例,除霜显示为蓝色。

温度读数示例

我需要设计一个工具,它可以获取一系列温度读数并分类最后的温度读数(最右边的一个)是否是除霜的一部分。训练数据由温度读数的一维数组和表示温度读数类别的等长一维数组组成(类别为 0 或 1,其中 1 表示除霜)。

我已经尝试过卷积和递归神经网络,但运气不佳。他们似乎无法学会利用除霜之间的间隔,因此他们一直错误地将最后读数归类为除霜的一部分,即使没有足够的时间过去。例如,在下图中,我训练有素的网络错误地将最后一次读数分类为解冻的开始,即使解冻还为时过早。是否有更擅长识别周期性模式的机器学习或深度学习工具?有没有更好的技术对我的数据进行分类?谢谢。

最后阅读将被错误标记

1个回答

我会在时间序列的特征时间(EWMA,Sgolay,...)上使用一个不错的平滑,我会看看与那个平滑的背离。如果您每 5 分钟采样一次,那么 EWMA 权重应该是 1/12 或 1/24,或者 SG 窗口大小应该在 12 或 24 个单位左右。

我还会循环时间:(
一天中的小时)-> [cos(小时/24),sin(小时/24)](一周中的一天)--> [cos(天/7),罪(天/ 7)] (一年中的星期) --> [cos(week/53), sin(week/53)]

并为周末和节假日添加标志。

你不会得到一切。如果有人在他们家举办超级碗(或其他运动/球)派对、孩子生日或其他庆祝活动,那么冰箱可能会获得很多非典型里程。

一个像样的随机森林应该在这里做得很好。将错误、循环时间/日期和周末或假日标志输入它,它应该可以很好地预测除霜事件。

如果你有不错的虚拟数据,我可以用伪代码向你展示,并给出不错的图表和拟合分析。