原文链接:http://tecdat.cn/?p=23902

原文出处:拓端数据部落公众号


递归神经网络被用来分析序列数据。它在隐藏单元之间建立递归连接,并在学习序列后预测输出。
在本教程中,我们将简要地学习如何用R中的Keras RNN模型来拟合和预测多输出的序列数据,你也可以对时间序列数据应用同样的方法。我们将使用Keras R接口在R中实现神经网络:
 

  1. 准备数据
  2. 定义模型
  3. 预测和可视化结果

我们将从加载R的必要包开始。 

library(keras)


准备数据

首先,我们将为本教程创建一个多输出数据集。它是随机产生的数据,下面有一些规则。在这个数据集中有三个输入变量和两个输出变量。我们将绘制生成的数据,以直观地检查它。

拓端tecdat|R语言深度学习Keras循环神经网络(RNN)模型预测多输出变量时间序列

  1.  
     
  2.  
    plot(s, df$y1, ylim = c(min(df), max(df)), type = "l")
  3.  
    lines(s, df$y2, type = "l")
  4.  
    lines(s, df$x1, type = "l")
  5.  
    lines(s, df$x2, type = "l")
  6.  
    lines(s, df$x3, type = "l")

拓端tecdat|R语言深度学习Keras循环神经网络(RNN)模型预测多输出变量时间序列

接下来,我们将把数据分成训练和测试两部分。最后的50个元素将是测试数据。
 

  1.  
    train = df[1:(n-tsize), ]
  2.  
    test = df[(n-tsize+1):n, ]

我们将创建x输入和y输出数据来训练模型,并将它们转换成矩阵类型。
 

  1.  
    xtrain = as.matrix(data.frame(train$x1, train$x2, train$x3))
  2.  
    ytrain = as.matrix(data.frame(train$y1, train$y2))

接下来,我们将通过给定的步长值对输入和输出值进行切分来准备数据。在这个例子中,步长值是2,我们将把x的第一和第二行以及y的第二行作为一个标签值。下一个元素成为x的第二和第三行以及y的第三行,这个序列一直持续到结束。下表解释了如何创建x和y数据的序列。
 

拓端tecdat|R语言深度学习Keras循环神经网络(RNN)模型预测多输出变量时间序列

如果步长值为3,我们将取3行x数据,第三行y数据成为输出。
 

  1.  
     
  2.  
     
  3.  
    dim(trains$x)
  4.  
    [1] 798 3 2
  5.  
    dim(trains$y)
  6.  
    [1] 798 2

拓端tecdat|R语言深度学习Keras循环神经网络(RNN)模型预测多输出变量时间序列

定义模型

 我们将通过添加简单的RNN层、用于输出的Dense层和带有MSE损失函数的Adam优化器来定义序列模型。我们将在模型的第一层设置输入维度,在最后一层设置输出维度。

  1.  
     
  2.  
    model %>% summary()

拓端tecdat|R语言深度学习Keras循环神经网络(RNN)模型预测多输出变量时间序列

我们将用训练数据来拟合这个模型。
 

fit(trains$x, trains$y)

并检查训练的准确性。
 

  1.  
    evaluate(trains$x, trains$y, verbose = 0)
  2.  
    print(scores)

拓端tecdat|R语言深度学习Keras循环神经网络(RNN)模型预测多输出变量时间序列

预测和可视化的结果

最后,我们将预测测试数据,用RMSE指标检查y1和y2的准确性。
 

  1.  
     
  2.  
    cat("y1 RMSE:", RMSE(tests$y[, 1], ypred[, 1]))

拓端tecdat|R语言深度学习Keras循环神经网络(RNN)模型预测多输出变量时间序列


cat("y2 RMSE:", RMSE(tests$y[, 2], ypred[, 2]))

拓端tecdat|R语言深度学习Keras循环神经网络(RNN)模型预测多输出变量时间序列

我们可以在图中直观地检查结果。

  1.  
     
  2.  
    plot(x_axes, tests$y[, 1], ylim = c(min(tests$y), max(tests$y))type = "l", lwd = 2,

拓端tecdat|R语言深度学习Keras循环神经网络(RNN)模型预测多输出变量时间序列

   在本教程中,我们已经简单了解了如何用R中的Keras rnn模型来拟合和预测多输出的顺序数据。 
 


拓端tecdat|R语言深度学习Keras循环神经网络(RNN)模型预测多输出变量时间序列

最受欢迎的见解

1.r语言用神经网络改进nelson-siegel模型拟合收益率曲线分析

2.r语言实现拟合神经网络预测和结果可视化

3.python用遗传算法-神经网络-模糊逻辑控制算法对乐透分析

4.用于nlp的python:使用keras的多标签文本lstm神经网络分类

5.用r语言实现神经网络预测股票实例

6.R语言基于Keras的小数据集深度学习图像分类

7.用于NLP的seq2seq模型实例用Keras实现神经机器翻译

8.python中基于网格搜索算法优化的深度学习模型分析糖

9.matlab使用贝叶斯优化的深度学习