如何训练模型从多维时间序列中预测 30 分钟前的事件
这是一个有趣的问题。这是一个时间序列,您希望从该时间序列中识别某个事件的触发器。所以这是一个二分类问题。根据来自指定窗口的信息,是否会出现尖峰?是还是不是。
第一步是设置您的数据库。您将拥有一组实例(可能有一些重叠,但为避免偏差,最好将它们独立绘制),然后对于每个实例,人类需要标记是否有尖峰或没有长钉。
然后,您需要确定要用于时间序列分析的时间窗口。你已经这样做了,并决定 30 分钟是一个好的开始。
现在,您在 30 分钟窗口中有 6 个波形,您可以从中提取数据以获取有关您的分类的信息。您可以使用原始数据样本作为您的特征,但这是太多的特征,会导致糟糕的结果。因此,您需要一些特征提取、降维、技术。
有上百万种方法可以从这些波形中提取数据。首先,问问自己,作为一个人类,这些其他波形应该有哪些迹象表明会出现尖峰。例如,在地震数据中,如果您在邻近城镇的波形中看到搅动,那么您应该期望很快会在您的城镇中看到搅动。
一般来说,我喜欢从我的波形中提取所有基本统计数据。获取平均值、标准差、波动指数等。获取您认为可能有帮助的任何内容。检查这些统计信息如何与您的标签相关联。相关性越高,它们可能越好。然后有一些非常好的技术可以从您的时间序列中提取时间和频率信息。研究包络模式分解和经验模式分解。我在一些时间序列数据上成功地使用了经验模态分解,得到的结果比我预期的要好得多。
现在,即使您减少了功能空间,您也可以做得更好!您可以应用一些降维技术(例如PCA或LDA)来获得可能更好地代表您的数据的低维空间。这可能会有所帮助,但不能保证。
现在,您有一个小数据集,其中包含弗兰肯斯坦混合物的实例,它代表了 30 分钟窗口内的 6 个波形。现在你已经准备好选择你的分类器了。您将需要一个二进制分类算法,幸运的是这是最常见的。有很多可供选择。如何选择?
你有多少实例?
?
然后你就可以使用深度学习技术了,比如神经网络、一维卷积神经网络、堆叠自动编码器等等……
比那个少!!!! 你应该坚持浅薄的方法。查看内核支持向量机、随机森林、k-最近邻等。
常见的误解:如果您正确选择了特征,浅层方法可以并且将比深度学习技术表现更好。特征提取是机器学习架构中最重要的方面。
我想使用异常检测!
这也可行,并且有一些很好的技术可以做到这一点。然而,异常检测的本质是学习名义情况的分布。因此,您将为您的算法提供数据集中没有导致峰值的所有实例。然后,您的算法将能够识别新实例何时与此名义分布有显着差异,并将其标记为异常。这意味着在您的上下文中会出现峰值。
查看:
您还可以使用更基本的异常检测技术,例如广义似然比检验。但是,这有点老派。
您需要进行特征提取或特征工程,以在您的训练数据中创建变量,以“捕捉”您装箱的那些模式,然后让目标变量显示“发现恶意”或“未发现恶意”
举一个非常简单的例子:预测是否会下雨。如果 1. 突然多云和 2. 气压下降,您可以在接下来的 30 分钟内提出一个相当好的降雨预测器,每 30 分钟检查一次。