学习
实践
活动
专区
工具
TVP
写文章

BP神经网络模型:Matlab

本文介绍了运用计量统计软件Matlab(2017aMAC)建立BP神经网络模型的方法。主要运用的方程是feedforwardnet

整理数据

本例中的数据来自于Matalab提供的内置数据,可以通过代码

1.load bodyfat_dataset

获得,为方便其他软件读取,已经将数据复制粘贴到Excel中

本例中,1至13列为输入变量,第14列为输出变量,即输入层包含13个神经元,输出层有一个神经元。另外设定一个隐含层,包括20个神经元

每个神经元包含252个数据点,其中最后一个点不参与训练,留作测试最终的模型,即利用前251个数据点训练模型,利用最后一个点检验模型

在Matlab中输入数据

1、点击打开Matlab,确保保存的Excel文件和软件路径一致

2、在Editor界面中编辑代码,其中clc清除Command Window,clear清除Workspace

1.clc

2.clear

Note 1:

选中代码,点击鼠标右键,选择Evaluate Selection执行选中代码

3、利用xlsread函数读取数据,其中第一格单引号内是文件名称,第二格是工作表位置,第三格单引号内是数据范围

1.clc

2.clear

3.

4.data=xlsread('bodyfat_dataset',1,'A1:N252');

5.

执行代码后,新的变量出现在Workspace页面中,其中,矩阵列表示各变量,行表示各数据

进行BP神经网络建模

数据录入完成后,继续在Editor界面进行操作

1、首先利用feedforwardnet函数建立模型,20表示隐含层包含20个神经元,输入层至隐含层的传递函数为Hyperbolictangent函数,隐含层至输出层的传递函数为Sigmoid函数

1.clc

2.clear

3.

4.data = xlsread('bodyfat_dataset',1,' A1:N252');

5.

6.net = feedforwardnet(20);

9.

2、对原始数据进行拆分,前251个数据用来训练,最后一个用来测试

1.clc

2.clear

3.

4.data = xlsread('bodyfat_dataset',1,' A1:N252');

5.

6.net = feedforwardnet(20);

9.

10.input = data(1:251,1:13);

11.inputend = data(end,1:13);

12.target = data(1:251,14);

13.targetend = data(end,end);

14.

3、利用train对模型进行训练,遵循反向修改权重的原则

1.clc

2.clear

3.

4.data = xlsread('bodyfat_dataset',1,' A1:N252');

5.

6.net = feedforwardnet(20);

9.

10.input = data(1:251,1:13);

11.inputend = data(end,1:13);

12.target = data(1:251,14);

13.targetend = data(end,end);

14.

15.net = train(net,input',target');

16.

在跳出的训练图中,可以看出该模型输入层个神经元,隐含层20个,输出层1个。模型训练17次就达到预期要求

4、最后,利用留置的数据进行测试,输出值与目标值的偏差

1.clc

2.clear

3.

4.data = xlsread('bodyfat_dataset',1,' A1:N252');

5.

6.net = feedforwardnet(20);

9.

10.input = data(1:251,1:13);

11.inputend = data(end,1:13);

12.target = data(1:251,14);

13.targetend = data(end,end);

14.

15.net = train(net,input',target');

16.

17.net(inputend')-targetend

18.

Note 2:

重复运行代码,可以发现每次的结果并不相同,这是因为,初始权重是随机设定的

Note 3 :

由于初始权重是随机设定的,所以每次运行的结果可能有所不同,这也体现出神经网络模型的局限性,模型训练找出的误差最小权重可能只是局部上使误差最小的权重,这样的权重可能有很多个,所以结果有很多种。解决这种问题的一个方法是,留一部分数据不参加训练,而是用来测试模型的输出结果,当输出与目标值较为接近时,再利用模型进行预测

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180127G063UK00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

同媒体快讯

关注

腾讯云开发者公众号
10元无门槛代金券
洞察腾讯核心技术
剖析业界实践案例
腾讯云开发者公众号二维码

扫码关注腾讯云开发者

领取腾讯云代金券