如何在我的时间序列数据中使用Theanets LSTM RNN?

时间:2016-03-17 16:36:41

标签: theano lstm recurrent-neural-network

我有一个由一列组成的简单数据框。在该列中有10320个观测值(数值)。我通过将数据插入到具有每个200个观测值的窗口的图中来模拟时间序列数据。这是绘图的代码。

import matplotlib.pyplot as plt
from IPython import display
fig_size = plt.rcParams["figure.figsize"]
import time
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
fig, axes = plt.subplots(1,1, figsize=(19,5))
df = dframe.set_index(arange(0,len(dframe)))
std = dframe[0].std() * 6
window = 200
iterations = int(len(dframe)/window)
i = 0
dframe = dframe.set_index(arange(0,len(dframe)))
while i< iterations:
    frm = window*i
    if i == iterations:
        to = len(dframe)
    else:
        to = frm+window
    df = dframe[frm : to]
    if len(df) > 100:
        df = df.set_index(arange(0,len(df)))
        plt.gca().cla() 
        plt.plot(df.index, df[0])
        plt.axhline(y=std, xmin=0, xmax=len(df[0]),c='gray',linestyle='--',lw = 2, hold=None)
        plt.axhline(y=-std , xmin=0, xmax=len(df[0]),c='gray',linestyle='--', lw = 2, hold=None)
        plt.ylim(min(dframe[0])- 0.5 , max(dframe[0]) )
        plt.xlim(-50,window+50)
        display.clear_output(wait=True)
        display.display(plt.gcf()) 
        canvas = FigureCanvas(fig)
        canvas.print_figure('fig.png', dpi=72, bbox_inches='tight')
    i += 1
plt.close()

这模拟了实时数据流并使其可视化。我想要的是将数据RNN LSTM应用于数据以检测无监督的异常。因为我无人监管,所以我不认为我需要将数据分成训练和测试集。到目前为止,我还没有发现任何对我有意义的事情,并且已经谷歌搜索了大约2个小时。只是希望你们可以提供帮助。我想将RNN的预测输出也放在图上,并定义一个阈值,如果误差太大,则该值将被识别为异常。如果您需要更多信息,请发表评论并告诉我们。谢谢!

1 个答案:

答案 0 :(得分:2)

<强>阅读

  1. 与神经元一样,LSTM网络是互联的LSTM Blocks的构建,其培训是通过BackPropogation Through Time完成的。
  2. 使用时间序列的经典异常检测需要预测未来的时间序列输出(在一个或多个点)并在这些点上找到具有真值的误差。高于阈值的预测误差将反映并且非常
  3. <强>解

    说完这个

    1. 您需要培训网络,因此您需要培训集测试集
    2. 使用N个输入来预测M个输出(通过实验确定N和M - 训练误差低的值
    3. 在输入数据中滚动一个(N + M)个元素的窗口,并使用这个(N + M)项目的数据数组,也称为框架来训练或测试网络。
    4. 通常我们使用90%的起始系列进行培训,10%进行测试。
    5. 此方案将失败,好像训练不正确会出现错误预测错误,这是非异常。因此,请确保提供足够的培训,并且最重要的随机播放培训框考虑所有变体