希望能够用五个参数预测一个输出值,得到权值矩阵。
五个变量,输出一个预测值
网络结构:单隐含层神经网络,五个输入节点,7个隐含层节点,1个输出层节点
传递函数:tanhx
clear all
clc
%% 读取数据并划分数据集
data = [1.5000 0.1000 0.0500 6.2832 0.2000 0.7839
1.5000 0.1000 0.0500 6.2832 0.3000 0.7677
1.5000 0.1000 0.0500 6.2832 0.4000 0.7541
1.5000 0.1000 0.0500 6.2832 0.5000 0.7378
1.5000 0.1000 0.0500 11.9119 0.2000 0.7683
1.5000 0.1000 0.0500 11.9119 0.3000 0.7452
1.5000 0.1000 0.0500 11.9119 0.4000 0.7223
1.5000 0.1000 0.0500 11.9119 0.5000 0.6993
1.5000 0.1000 0.0500 17.8024 0.2000 0.7544
1.5000 0.1000 0.0500 17.8024 0.3000 0.7223
1.5000 0.1000 0.0500 17.8024 0.4000 0.6948
1.5000 0.1000 0.0500 17.8024 0.5000 0.6668
1.5000 0.1000 0.1000 6.2832 0.2000 0.7543
1.5000 0.1000 0.1000 6.2832 0.3000 0.7410
1.5000 0.1000 0.1000 6.2832 0.4000 0.7265
1.5000 0.1000 0.1000 6.2832 0.5000 0.7118
1.5000 0.1000 0.1000 11.9119 0.2000 0.7433
1.5000 0.1000 0.1000 11.9119 0.3000 0.7246
1.5000 0.1000 0.1000 11.9119 0.4000 0.7042
1.5000 0.1000 0.1000 11.9119 0.5000 0.6825
1.5000 0.1000 0.1000 17.8024 0.2000 0.7256
1.5000 0.1000 0.1000 17.8024 0.3000 0.6980
1.5000 0.1000 0.1000 17.8024 0.4000 0.6704
1.5000 0.1000 0.1000 17.8024 0.5000 0.6435
1.5000 0.1000 0.1500 6.2832 0.2000 0.7240
1.5000 0.1000 0.1500 6.2832 0.3000 0.7115
1.5000 0.1000 0.1500 6.2832 0.4000 0.6976
1.5000 0.1000 0.1500 6.2832 0.5000 0.6828
1.5000 0.1000 0.1500 11.9119 0.2000 0.7136
1.5000 0.1000 0.1500 11.9119 0.3000 0.6965
1.5000 0.1000 0.1500 11.9119 0.4000 0.6790
1.5000 0.1000 0.1500 11.9119 0.5000 0.6615
1.5000 0.1000 0.1500 17.8024 0.2000 0.6957
1.5000 0.1000 0.1500 17.8024 0.3000 0.6696
1.5000 0.1000 0.1500 17.8024 0.4000 0.6435
1.5000 0.1000 0.1500 17.8024 0.5000 0.6178
1.5000 0.2000 0.0500 6.2832 0.2000 0.7180
1.5000 0.2000 0.0500 6.2832 0.3000 0.7055
1.5000 0.2000 0.0500 6.2832 0.4000 0.6915
1.5000 0.2000 0.0500 6.2832 0.5000 0.6770
1.5000 0.2000 0.0500 11.9119 0.2000 0.7085
1.5000 0.2000 0.0500 11.9119 0.3000 0.6909
1.5000 0.2000 0.0500 11.9119 0.4000 0.6727
1.5000 0.2000 0.0500 11.9119 0.5000 0.6548
1.5000 0.2000 0.0500 17.8024 0.2000 0.6905
1.5000 0.2000 0.0500 17.8024 0.3000 0.6647
1.5000 0.2000 0.0500 17.8024 0.4000 0.6385
1.5000 0.2000 0.0500 17.8024 0.5000 0.6127
1.5000 0.2000 0.1000 6.2832 0.2000 0.6877
1.5000 0.2000 0.1000 6.2832 0.3000 0.6760
1.5000 0.2000 0.1000 6.2832 0.4000 0.6628
1.5000 0.2000 0.1000 6.2832 0.5000 0.6481
1.5000 0.2000 0.1000 11.9119 0.2000 0.6768
1.5000 0.2000 0.1000 11.9119 0.3000 0.6596
1.5000 0.2000 0.1000 11.9119 0.4000 0.6436
1.5000 0.2000 0.1000 11.9119 0.5000 0.6270
1.5000 0.2000 0.1000 17.8024 0.2000 0.6633
1.5000 0.2000 0.1000 17.8024 0.3000 0.6388
1.5000 0.2000 0.1000 17.8024 0.4000 0.6141
1.5000 0.2000 0.1000 17.8024 0.5000 0.5893
1.5000 0.2000 0.1500 6.2832 0.2000 0.6548
1.5000 0.2000 0.1500 6.2832 0.3000 0.6448
1.5000 0.2000 0.1500 6.2832 0.4000 0.6326
1.5000 0.2000 0.1500 6.2832 0.5000 0.6188
1.5000 0.2000 0.1500 11.9119 0.2000 0.6434
1.5000 0.2000 0.1500 11.9119 0.3000 0.6275
1.5000 0.2000 0.1500 11.9119 0.4000 0.6116
1.5000 0.2000 0.1500 11.9119 0.5000 0.5954
1.5000 0.2000 0.1500 17.8024 0.2000 0.6343
1.5000 0.2000 0.1500 17.8024 0.3000 0.6135
1.5000 0.2000 0.1500 17.8024 0.4000 0.5914
1.5000 0.2000 0.1500 17.8024 0.5000 0.5682
1.5000 0.3000 0.0500 6.2832 0.2000 0.6488
1.5000 0.3000 0.0500 6.2832 0.3000 0.6388
1.5000 0.3000 0.0500 6.2832 0.4000 0.6268
1.5000 0.3000 0.0500 6.2832 0.5000 0.6133
1.5000 0.3000 0.0500 11.9119 0.2000 0.6367
1.5000 0.3000 0.0500 11.9119 0.3000 0.6212
1.5000 0.3000 0.0500 11.9119 0.4000 0.6054
1.5000 0.3000 0.0500 11.9119 0.5000 0.5894
1.5000 0.3000 0.0500 17.8024 0.2000 0.6281
1.5000 0.3000 0.0500 17.8024 0.3000 0.6072
1.5000 0.3000 0.0500 17.8024 0.4000 0.5847
1.5000 0.3000 0.0500 17.8024 0.5000 0.5615
1.5000 0.3000 0.1000 6.2832 0.2000 0.6139
1.5000 0.3000 0.1000 6.2832 0.3000 0.6055
1.5000 0.3000 0.1000 6.2832 0.4000 0.5956
1.5000 0.3000 0.1000 6.2832 0.5000 0.5841
1.5000 0.3000 0.1000 11.9119 0.2000 0.6042
1.5000 0.3000 0.1000 11.9119 0.3000 0.5906
1.5000 0.3000 0.1000 11.9119 0.4000 0.5755
1.5000 0.3000 0.1000 11.9119 0.5000 0.5600
1.5000 0.3000 0.1000 17.8024 0.2000 0.5939
1.5000 0.3000 0.1000 17.8024 0.3000 0.5752
1.5000 0.3000 0.1000 17.8024 0.4000 0.5565
1.5000 0.3000 0.1000 17.8024 0.5000 0.5376
1.5000 0.3000 0.1500 6.2832 0.2000 0.5747
1.5000 0.3000 0.1500 6.2832 0.3000 0.5675
1.5000 0.3000 0.1500 6.2832 0.4000 0.5593
1.5000 0.3000 0.1500 6.2832 0.5000 0.5501
1.5000 0.3000 0.1500 11.9119 0.2000 0.5693
1.5000 0.3000 0.1500 11.9119 0.3000 0.5587
1.5000 0.3000 0.1500 11.9119 0.4000 0.5465
1.5000 0.3000 0.1500 11.9119 0.5000 0.5330
1.5000 0.3000 0.1500 17.8024 0.2000 0.5555
1.5000 0.3000 0.1500 17.8024 0.3000 0.5381
1.5000 0.3000 0.1500 17.8024 0.4000 0.5202
1.5000 0.3000 0.1500 17.8024 0.5000 0.5022
2.0000 0.1000 0.0500 6.2832 0.2000 0.6650
2.0000 0.1000 0.0500 6.2832 0.3000 0.6527
2.0000 0.1000 0.0500 6.2832 0.4000 0.6385
2.0000 0.1000 0.0500 6.2832 0.5000 0.6256
2.0000 0.1000 0.0500 11.9119 0.2000 0.6518
2.0000 0.1000 0.0500 11.9119 0.3000 0.6328
2.0000 0.1000 0.0500 11.9119 0.4000 0.6139
2.0000 0.1000 0.0500 11.9119 0.5000 0.5957
2.0000 0.1000 0.0500 17.8024 0.2000 0.6331
2.0000 0.1000 0.0500 17.8024 0.3000 0.6097
2.0000 0.1000 0.0500 17.8024 0.4000 0.5837
2.0000 0.1000 0.0500 17.8024 0.5000 0.5583
2.0000 0.1000 0.1000 6.2832 0.2000 0.6522
2.0000 0.1000 0.1000 6.2832 0.3000 0.6373
2.0000 0.1000 0.1000 6.2832 0.4000 0.6272
2.0000 0.1000 0.1000 6.2832 0.5000 0.6139
2.0000 0.1000 0.1000 11.9119 0.2000 0.6407
2.0000 0.1000 0.1000 11.9119 0.3000 0.6227
2.0000 0.1000 0.1000 11.9119 0.4000 0.6052
2.0000 0.1000 0.1000 11.9119 0.5000 0.5877
2.0000 0.1000 0.1000 17.8024 0.2000 0.6242
2.0000 0.1000 0.1000 17.8024 0.3000 0.5987
2.0000 0.1000 0.1000 17.8024 0.4000 0.5736
2.0000 0.1000 0.1000 17.8024 0.5000 0.5496
2.0000 0.1000 0.1500 6.2832 0.2000 0.6345
2.0000 0.1000 0.1500 6.2832 0.3000 0.6182
2.0000 0.1000 0.1500 6.2832 0.4000 0.6067
2.0000 0.1000 0.1500 6.2832 0.5000 0.5963
2.0000 0.1000 0.1500 11.9119 0.2000 0.6242
2.0000 0.1000 0.1500 11.9119 0.3000 0.6077
2.0000 0.1000 0.1500 11.9119 0.4000 0.5933
2.0000 0.1000 0.1500 11.9119 0.5000 0.5772
2.0000 0.1000 0.1500 17.8024 0.2000 0.6051
2.0000 0.1000 0.1500 17.8024 0.3000 0.5836
2.0000 0.1000 0.1500 17.8024 0.4000 0.5594
2.0000 0.1000 0.1500 17.8024 0.5000 0.5361
2.0000 0.2000 0.0500 6.2832 0.2000 0.6278
2.0000 0.2000 0.0500 6.2832 0.3000 0.6177
2.0000 0.2000 0.0500 6.2832 0.4000 0.6047
2.0000 0.2000 0.0500 6.2832 0.5000 0.5916
2.0000 0.2000 0.0500 11.9119 0.2000 0.6179
2.0000 0.2000 0.0500 11.9119 0.3000 0.6019
2.0000 0.2000 0.0500 11.9119 0.4000 0.5858
2.0000 0.2000 0.0500 11.9119 0.5000 0.5682
2.0000 0.2000 0.0500 17.8024 0.2000 0.6018
2.0000 0.2000 0.0500 17.8024 0.3000 0.5775
2.0000 0.2000 0.0500 17.8024 0.4000 0.5535
2.0000 0.2000 0.0500 17.8024 0.5000 0.5306
2.0000 0.2000 0.1000 6.2832 0.2000 0.6115
2.0000 0.2000 0.1000 6.2832 0.3000 0.6003
2.0000 0.2000 0.1000 6.2832 0.4000 0.5883
2.0000 0.2000 0.1000 6.2832 0.5000 0.5753
2.0000 0.2000 0.1000 11.9119 0.2000 0.5949
2.0000 0.2000 0.1000 11.9119 0.3000 0.5851
2.0000 0.2000 0.1000 11.9119 0.4000 0.5697
2.0000 0.2000 0.1000 11.9119 0.5000 0.5547
2.0000 0.2000 0.1000 17.8024 0.2000 0.5873
2.0000 0.2000 0.1000 17.8024 0.3000 0.5598
2.0000 0.2000 0.1000 17.8024 0.4000 0.5384
2.0000 0.2000 0.1000 17.8024 0.5000 0.5177
2.0000 0.2000 0.1500 6.2832 0.2000 0.5911
2.0000 0.2000 0.1500 6.2832 0.3000 0.5791
2.0000 0.2000 0.1500 6.2832 0.4000 0.5685
2.0000 0.2000 0.1500 6.2832 0.5000 0.5557
2.0000 0.2000 0.1500 11.9119 0.2000 0.5761
2.0000 0.2000 0.1500 11.9119 0.3000 0.5644
2.0000 0.2000 0.1500 11.9119 0.4000 0.5466
2.0000 0.2000 0.1500 11.9119 0.5000 0.5349
2.0000 0.2000 0.1500 17.8024 0.2000 0.5686
2.0000 0.2000 0.1500 17.8024 0.3000 0.5492
2.0000 0.2000 0.1500 17.8024 0.4000 0.5275
2.0000 0.2000 0.1500 17.8024 0.5000 0.5037
2.0000 0.3000 0.0500 6.2832 0.2000 0.5835
2.0000 0.3000 0.0500 6.2832 0.3000 0.5726
2.0000 0.3000 0.0500 6.2832 0.4000 0.5601
2.0000 0.3000 0.0500 6.2832 0.5000 0.5491
2.0000 0.3000 0.0500 11.9119 0.2000 0.5676
2.0000 0.3000 0.0500 11.9119 0.3000 0.5537
2.0000 0.3000 0.0500 11.9119 0.4000 0.5393
2.0000 0.3000 0.0500 11.9119 0.5000 0.5252
2.0000 0.3000 0.0500 17.8024 0.2000 0.5626
2.0000 0.3000 0.0500 17.8024 0.3000 0.5374
2.0000 0.3000 0.0500 17.8024 0.4000 0.5200
2.0000 0.3000 0.0500 17.8024 0.5000 0.4958
2.0000 0.3000 0.1000 6.2832 0.2000 0.5566
2.0000 0.3000 0.1000 6.2832 0.3000 0.5496
2.0000 0.3000 0.1000 6.2832 0.4000 0.5413
2.0000 0.3000 0.1000 6.2832 0.5000 0.5311
2.0000 0.3000 0.1000 11.9119 0.2000 0.5462
2.0000 0.3000 0.1000 11.9119 0.3000 0.5340
2.0000 0.3000 0.1000 11.9119 0.4000 0.5199
2.0000 0.3000 0.1000 11.9119 0.5000 0.5080
2.0000 0.3000 0.1000 17.8024 0.2000 0.5382
2.0000 0.3000 0.1000 17.8024 0.3000 0.5197
2.0000 0.3000 0.1000 17.8024 0.4000 0.5014
2.0000 0.3000 0.1000 17.8024 0.5000 0.4835
2.0000 0.3000 0.1500 6.2832 0.2000 0.5295
2.0000 0.3000 0.1500 6.2832 0.3000 0.5226
2.0000 0.3000 0.1500 6.2832 0.4000 0.5144
2.0000 0.3000 0.1500 6.2832 0.5000 0.5057
2.0000 0.3000 0.1500 11.9119 0.2000 0.5249
2.0000 0.3000 0.1500 11.9119 0.3000 0.5146
2.0000 0.3000 0.1500 11.9119 0.4000 0.5028
2.0000 0.3000 0.1500 11.9119 0.5000 0.4898
2.0000 0.3000 0.1500 17.8024 0.2000 0.5094
2.0000 0.3000 0.1500 17.8024 0.3000 0.4918
2.0000 0.3000 0.1500 17.8024 0.4000 0.4736
2.0000 0.3000 0.1500 17.8024 0.5000 0.4561];
num_train = 150;
num_test = 30 ;
r = randperm(length(data));
set_train = data(r(1:num_train) , 1:5 );
set_result = data(r(1:num_train) , 6 )' ;
set_test = data(r(num_train+1 : num_train + num_test ), 1:5 );
set_test_result = data(r(num_train+1 : num_train + num_test ), 6 )';
%% 处理数据 正则化
for i = 1:5
normalization_train(:,i) = 0.8*(set_train(:,i)-min(set_train(:,i) ))/(max(set_train(:,i))-min(set_train(:,i))) +0.1;
normalization_test(:,i) = 0.8*(set_test(:,i)-min(set_test(:,i)))/(max(set_test(:,i))-min(set_test(:,i))) +0.1;
end
%% 创建网络
net.nIn = 5 ;
N=7 ;
net.nHidden = N;
net.nOut = 1 ;
w1 = 2*(rand(net.nHidden,net.nIn)-0.5);
b1 = 2*(rand(net.nHidden, 1) -0.5);
net.w1 = [w1,b1];
w2 = 2*(rand(net.nOut,net.nHidden)-0.5);
b2 = 2*(rand(net.nOut, 1) -0.5);
net.w2 = [w2,b2];
%% 输入数据训练
learning_rate = 0.2; %学习率
num_interation = 2000; % 迭代次数
interation = 0 ;%记录迭代次数
mc = 0.1 ; % 动量因子
eb = 0.01;
err_Save=[];
input = [normalization_train'; ones(1,num_train)];
for i = 1:num_interation
%信息正向传播
hidden_input = net.w1 * input;
hidde_output = tanh(hidden_input);
out_input1 = [hidde_output ; ones(1,num_train)] ;
out_input = net.w2 * out_input1;
out_out = tanh(out_input);
%处理误差
err = set_result - out_out ;
sse = sumsqr(err);
err_Save(i) = sse ;
fprintf('第%d次迭代误差为: %d \n',i,sse);
interation = interation+1;
if sse<=eb
break;
end
%误差反向传播
delta_2 = err.*(1-out_out.^2);
delta_1 =(net.w2(:,1:end-1)'* delta_2).* (1-tanh(hidden_input).^2);
dw_2 = delta_2 * out_input1';
dw_1 = delta_1 * input' ;
net.w2= net.w2 +learning_rate*dw_2;
net.w1=net.w1 + learning_rate*dw_1;
end
%% 测试
test_in = [normalization_test' ; ones(1,num_test)];
test_hidden_input = net.w1* test_in;
test_hidde_output = tanh(test_hidden_input);
test_out_input1 = [test_hidde_output ;ones(1,num_test)] ;
test_out_input = net.w2 * test_out_input1;
test_out_out = tanh(test_out_input);
err_test=(set_test_result-test_out_out)./set_test_result;% 计算误差
%绘制测试集的误差
correct_rate = 0;
for i = 1: num_test
if err_test(i)<=0.01
correct_rate= correct_rate+1;
end
end
fprintf('此次测试的正确率为: %d %% \n', correct_rate);
%% 绘图
% 绘制误差变化图
plot(err_Save);
误差平方和几步迭代以后就不再变化
尝试换传递函数,结果相同
你运行的没有结果对吗