某实验所测数据如下,根据实验测得数据使用BP神经网络的方法预测第18,19,20个数据的y值。
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
x1 |
-0.12 |
0.53 |
-0.63 |
-0.11 |
0.42 |
-0.45 |
0.31 |
-0.76 |
0.92 |
x2 |
-0.24 |
0.59 |
-0.02 |
0.29 |
0.51 |
0.36 |
-0.67 |
0.00 |
-0.32 |
y |
0.13 |
1.26 |
0.42 |
0.03 |
0.86 |
0.01 |
0.13 |
0.59 |
0.36 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
0.17 |
0.50 |
0.01 |
0.78 |
0.09 |
-0.70 |
0.68 |
0.63 |
0.86 |
-0.61 |
0.23 |
-0.55 |
-0.49 |
0.40 |
0.92 |
-0.72 |
-0.48 |
-0.49 |
-0.51 |
-0.30 |
-0.50 |
-0.05 |
0.15 |
0.00 |
0.17 |
2.89 |
0.39 |
1.41 |
0.04 |
0.01 |
|
|
|
所使用的包:AMORE
建立BP神经网络所需要的函数:newff,train和sim。
newff(n.neurons, learning.rate.global, momentum.global, error.criterium, Stao,
hidden.layer, output.layer, method)
newff返回一个多层前馈神经网络对象。
参数:
n.neurons:一个数字型向量,第一个向量值表示训练样本输入神经元的个数,最后一个向量值表示训练样本输出神经元的个数,中间的向量值依次表示各个隐藏层神经元的个数。
Example:n.neurons=c(12,2,4) 表示一个3层神经网络即12-2-4
n.neurons=c(12,2,4,4) 表示一个4层神经网络即 12-2-4-4,含有2个隐层
learning.rate.global :该参数用于设置神经元学习率
momentum.global :设置全局动量指标,部分训练方法将用到
error.criterium : 用于设置训练误差函数所采用的方法。包括了:
LMS:最小均方误差
LMLS : 最小均对数平方误差
TAO :
Stao : 此参数用于error.TAO 函数,其他误差函数无效。
hidden.layer : 设置隐藏层神经元采用的激励函数,包括:
"purelin". 线性函数
"tansig" : 传递函数
"sigmoid". S型函数
"hardlim".
"custom": 用户自定义的函数
output.layer : 设置输出层神经元采用的激励函数,包括:
"purelin". 线性函数
"tansig" : 传递函数
"sigmoid". S型函数
"hardlim".
"custom": 用户自定义的函数
method : 设置训练方法即权重更新时所采用的方法。
ADAPTgd : 自适应梯度下降法
ADAPTgdwm : 含有动量的自适应梯度下降法
BATCHgd : 批梯度下降
BATCHgdwm : 含有动量的批梯度下降法
用法
train(net,P,T,Pval = NULL,Tval = NULL,error.criterium =“LMS”,report = n.shows,show.step,Stao = NA,prob = NULL,n.threads = 0L)
参数
net
神经网络训练。
P
训练集输入值。
T
训练集输出值
Pval
验证设置可选提前停止的输入值。
Tval
验证设置可选提前停止的输出值。
error.criterium
用于测量拟合优度的标准:“LMS”,“LMLS”,“TAO”。
Stao
由TAO算法使用的S参数的初始值。
report
表示训练功能应保持安静还是应在训练过程中提供图形/书面信息的逻辑值。
n.shows
报告次数(如果报告为TRUE)。训练时期的总数是n.shows乘以show.step。
show.step
在训练结束前,训练最大次数。
prob
矢量与每个样本的概率,以便应用重采样训练。
n.threads
要为BATCH *训练方法生成的线程数。如果<1,则产生NumberProcessors-1个线程。
如果未找到OpenMP,则此参数将被忽略。
本问题的编程
library(AMORE)
p<-matrix(c(-0.12,-0.24,0.53,0.59,-0.63,-0.02,-0.11,0.29,0.42,0.51,-0.45,
0.36,0.31,-0.67,-0.76,0.00,0.92,-0.32,0.17,-0.55,0.50,-0.49,0.01,0.40,0.78,
0.92,0.09,-0.72,-0.70,-0.48,0.68,-0.49,0.63,-0.51,0.86,-0.30,-0.61,-0.50,0
.23,-0.05),20,2,byrow=T)
t<-c(0.13,1.26,0.42,0.03,0.86,0.01,0.13,0.59,0.36,0.15,0.00,0.17,2.89,
0.39,1.41,0.04,0.01)
net<-newff(n.neurons=c(2,5,1),learning.rate.global=1e-4,momentum.global=0.001,
error.criterium="LMS", Stao=NA, hidden.layer="tansig", output.layer="purelin",
method="ADAPTgdwm")
result<-train(net,p[1:17,],t[1:17],error.criterium="LMS", report=TRUE,
show.step=1000000, n.shows=5)
y<-sim(result$net,p[1:20,])
结果:
index.show: 1 LMS 0.0144609280347882最后三个的预报值
[18,] 0.31567784