递归神经网络(循环神经网络,RNN)被用来分析序列数据。
它在隐藏单元之间建立递归连接,并在学习序列后预测输出。
在本教程中,我们将简要地学习如何用R中的Keras RNN模型来拟合和预测多输出的序列数据,你也可以对时间序列数据应用同样的方法。我们将使用Keras R接口在R中实现神经网络:
循环神经网络可以分析时间序列数据,诸如股票价格,并告诉你什么时候买入和卖出。在自动驾驶系统中,他们可以预测行车轨迹,避免发生交通意外。
循环神经网络可以在任意长度的序列上工作,而不是之前讨论的只能在固定长度的输入上工作的网络。
举个例子,它们可以把语句,文件,以及语音范本作为输入,使得它们在诸如自动翻译,语音到文本或者情感分析(例如,读取电影评论并提取评论者关于该电影的感觉)的自然语言处理系统中极为有用。
另外,循环神经网络的预测能力使得它们具备令人惊讶的创造力。
可以要求它们去预测一段旋律的下几个音符,随机选取这些音符的其中之一并演奏它。然后要求网络给出接下来最可能的音符,演奏它,如此周而复始。
同样,循环神经网络可以生成语句,图像标注等。
- 准备数据
- 定义模型
- 预测和可视化结果
我们将从加载R的必要包开始。
library(keras)
准备数据
首先,我们将为本教程创建一个多输出数据集。它是随机产生的数据,下面有一些规则。在这个数据集中有三个输入变量和两个输出变量。我们将绘制生成的数据,以直观地检查它。
plot(s, df$y1, ylim = c(min(df), max(df)), type = "l") lines(s, df$y2, type = "l") lines(s, df$x1, type = "l") lines(s, df$x2, type = "l") lines(s, df$x3, type = "l")
接下来,我们将把数据分成训练和测试两部分。最后的50个元素将是测试数据。
train = df\[1:(n-tsize), \] test = df\[(n-tsize+1):n, \]
我们将创建x输入和y输出数据来训练模型,并将它们转换成矩阵类型。
xtrain = as.matrix(data.frame(train$x1, train$x2, train$x3)) ytrain = as.matrix(data.frame(train$y1, train$y2))
接下来,我们将通过给定的步长值对输入和输出值进行切分来准备数据。在这个例子中,步长值是2,我们将把x的第一和第二行以及y的第二行作为一个标签值。下一个元素成为x的第二和第三行以及y的第三行,这个序列一直持续到结束。下表解释了如何创建x和y数据的序列。
如果步长值为3,我们将取3行x数据,第三行y数据成为输出。
dim(trains$x) \[1\] 798 3 2 dim(trains$y) \[1\] 798 2
定义模型
我们将通过添加简单的RNN层、用于输出的Dense层和带有MSE损失函数的Adam优化器来定义序列模型。我们将在模型的第一层设置输入维度,在最后一层设置输出维度。
model %>% summary()
我们将用训练数据来拟合这个模型。
fit(trains$x, trains$y)
并检查训练的准确性。
evaluate(trains$x, trains$y, verbose = 0) print(scores)
随时关注您喜欢的主题
预测和可视化的结果
最后,我们将预测测试数据,用RMSE指标检查y1和y2的准确性。
cat("y1 RMSE:", RMSE(tests$y\[, 1\], ypred\[, 1\]))
我们可以在图中直观地检查结果。 `````` plot(x_axes, tests$y\[, 1\], ylim = c(min(tests$y), max(tests$y))type = "l", lwd = 2,
在本教程中,我们已经简单了解了如何用R中的Keras rnn模型来拟合和预测多输出的顺序数据。
可下载资源
关于作者
Kaizong Ye是拓端研究室(TRL)的研究员。在此对他对本文所作的贡献表示诚挚感谢,他在上海财经大学完成了统计学专业的硕士学位,专注人工智能领域。擅长Python.Matlab仿真、视觉处理、神经网络、数据分析。
本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。
非常感谢您阅读本文,如需帮助请联系我们!