R语言BP神经网络实例

来源:互联网 发布:年均增长率简便算法 编辑:程序博客网 时间:2024/05/18 03:04

某实验所测数据如下,根据实验测得数据使用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 {AMORE} R文档
神经网络训练功能。该函数返回具有两个元素的列表:经训练的神经网络对象,其具有通过具有动量方法的自适应反向传播和具有在训练期间获得的误差的矩阵调整的权重和偏差。如果提供了验证集,则应用早期停止技术。
描述
对于给定的数据集(训练集),该函数修改神经网络权重和偏差以近似训练集中存在的变量之间的关系。这些可以用于满足几个需要,即拟合非线性函数。

用法
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,则此参数将被忽略。


sim(net,P,...)
用于网络仿真。 

本问题的编程

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 
index.show: 2 LMS 0.0111151809015427 
index.show: 3 LMS 0.00882750612487179 
index.show: 4 LMS 0.0071993747608624 
index.show: 5 LMS 0.00580990383751156

最后三个的预报值

[18,]  0.31567784
[19,]  1.12549961
[20,]  0.01159760
原创粉丝点击