本文介绍了运用计量统计软件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 :
由于初始权重是随机设定的,所以每次运行的结果可能有所不同,这也体现出神经网络模型的局限性,模型训练找出的误差最小权重可能只是局部上使误差最小的权重,这样的权重可能有很多个,所以结果有很多种。解决这种问题的一个方法是,留一部分数据不参加训练,而是用来测试模型的输出结果,当输出与目标值较为接近时,再利用模型进行预测
领取专属 10元无门槛券
私享最新 技术干货