分类算法很多。它们基本上都采用一个矩阵,其中的行是观察值,列是以某种方式描述观察值的“特征”,以及长度为0或1的长度行的标签矢量。在您的问题中,观察值可能是一分钟的样本,则在遇到性能问题的时间段内,标签向量的值为1,否则为0。
在此定义中隐含了需要对数据进行重新采样(必要时使用模式/中位数/平均值),以使每个观察值均被均匀定义,例如秒,分钟或小时。
生成特征是至关重要的部分。我可能会从2个功能开始,即 原始值 和观测 值 x_i和x_i-1之间的(一次) 差值
。我们将这些定义为2的滞后时间。每个功能都无法展望未来。对于每个观察,每个特征都必须代表相同的事物。
例如,考虑长度为10的时间序列:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
如果我们要使用过去两个间隔的滞后来生成一组要素,则时间序列的前两个元素被视为老化样本。我们不能使用与它们相关的观察结果来训练算法。
8行2列的 原始值 是
[[ 1., 0.] [ 2., 1.], [ 3., 2.], [ 4., 3.], [ 5., 4.], [ 6., 5.], [ 7., 6.], [ 8., 7.]]
在 求差值
[[ 1., 1.], [ 1., 1.], [ 1., 1.], [ 1., 1.], [ 1., 1.], [ 1., 1.], [ 1., 1.]])
这些将列堆叠。您可以探索许多其他功能。滚动平均将是我的下一个选择。
如果您想在未来做进一步的预测,那么您的训练数据应该与标签向量相距较远。
如果性能不令人满意,请尝试通过在更大的窗口上选择滚动平均值来添加更多功能,或者将来再添加更多功能。改善时间序列算法性能的一个聪明技巧是包括前一个时间间隔的预测值。
使分类器适合数据的某些早期部分,然后在数据的后续部分中观察其准确性。您可以使用许多分类指标。如果您选择使用输出概率而不是硬1/0的分类器,那么您的选择甚至会扩大。(分类器的用法也是如此。)
精度和召回率是分类器的直观性能指标。
训练数据的前半部分(后半部分)并测试后半部分(后半部分)。
就算法而言,我将研究逻辑回归。如果性能不令人满意,并且您已经用尽了特征提取选项,我只会在别处查找。
Mallet似乎是完成此任务的良好库。请参阅此文档。
我最近发现了JSAT,它看起来很有希望。
有更多特定的时间序列分类方法,这些方法明确考虑了观测值和标签的顺序性质。这是分类对时间序列的通用调整。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)