bp神经网络吧 关注:114贴子:245
  • 0回复贴,共1

关于BP神经网络预测降雨量模型拟合度不行的问题,可付费解决

只看楼主收藏回复

代码和数据都是网上找到,思路是想把降雨量当成时间序列来预测,但是拟合度很差,调了很多次参数都不行,现在我不知道到底是代码问题还是数据问题了,具体代码和数据在下面。有大佬帮帮忙不
%% 清空环境变量
warning off % 关闭报警信息
close all % 关闭开启的图窗
clear % 清空变量
clc % 清空命令行
%% 导入数据(时间序列的单列数据)
result = xlsread('测试6.xls');
%% 数据分析
num_samples = length(result); % 样本个数
kim = 12; % 延时步长(kim个历史数据作为自变量)
zim = 1; % 跨zim个时间点进行预测
%% 构造数据集
for i = 1: num_samples - kim - zim + 1
res(i, :) = [reshape(result(i: i + kim - 1), 1, kim), result(i + kim + zim - 1)];
end
%% 划分训练集和测试集
temp =1:1:264;
P_train = res(temp(1: 204), 1: 12)';
T_train = res(temp(1: 204), 13)';
M = size(P_train, 2);
P_test = res(temp(204:end), 1: 12)';
T_test = res(temp(204:end), 13)';
N = size(P_test, 2);
%% 数据归一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input);
[t_train, ps_output] = mapminmax(T_train, 0, 1);
t_test = mapminmax('apply', T_test, ps_output);
%% 创建网络
net = newff(p_train, t_train, 11);
%% 设置训练参数.
net.trainParam.epochs = 1000; % 迭代次数
net.trainParam.goal = 0.005
; % 误差阈值
net.trainParam.lr = 0.05; % 学习率
%% 训练网络
net= train(net, p_train, t_train);
%% 仿真测试
t_sim1 = sim(net, p_train);
t_sim2 = sim(net, p_test);
%% 数据反归一化
T_sim1 = mapminmax('reverse', t_sim1, ps_output);
T_sim2 = mapminmax('reverse', t_sim2, ps_output);
%% 均方根误差
error1 = sqrt(sum((T_sim1 - T_train).^2) ./ M);
error2 = sqrt(sum((T_sim2 - T_test ).^2) ./ N);
%% 绘图
figure
plot(1: M, T_train, 'r-', 1: M, T_sim1, 'b-', 'LineWidth', 1)
legend('真实值', '预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {strcat('训练集预测结果对比:', ['RMSE=' num2str(error1)])};
title(string)
xlim([1, M])
grid
figure
plot(1: N, T_test, 'r-', 1: N, T_sim2, 'b-', 'LineWidth', 1)
legend('真实值', '预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {strcat('测试集预测结果对比:', ['RMSE=' num2str(error2)])};
title(string)
xlim([1, N])
grid
%% 相关指标计算
% R2
R1 = 1 - norm(T_train - T_sim1)^2 / norm(T_train - mean(T_train))^2;
R2 = 1 - norm(T_test - T_sim2)^2 / norm(T_test - mean(T_test ))^2;
disp(['训练集数据的R2为:', num2str(R1)])
disp(['测试集数据的R2为:', num2str(R2)])
disp(error1);
disp(error2);
% MAE
mae1 = sum(abs((T_train-T_sim1 )./T_train)) ./ M ;
mae2 = sum(abs((T_test-T_sim2 )./T_test)) ./ N ;
disp(['训练集数据的MAE为:', num2str(mae1)])
disp(['测试集数据的MAE为:', num2str(mae2)])
%% 绘制散点图
sz = 25;
c = 'b';
figure
scatter(T_train, T_sim1, sz, c)
hold on
plot(xlim, ylim, '--k')
xlabel('训练集真实值');
ylabel('训练集预测值');
xlim([min(T_train) max(T_train)])
ylim([min(T_sim1) max(T_sim1)])
title('训练集预测值 vs. 训练集真实值')
figure
scatter(T_test, T_sim2, sz, c)
hold on
plot(xlim, ylim, '--k')
xlabel('测试集真实值');
ylabel('测试集预测值');
xlim([min(T_test) max(T_test)])
ylim([min(T_sim2) max(T_sim2)])
title('测试集预测值 vs. 测试集真实值')
input_to_hidden_weights = net.IW{1};
% 查看隐含层到输出层的权值
%hidden_to_output_weights = net.LW{2,1};
% 查看偏置
%bias = net.b;
% 显示权值和偏置
%disp('输入层到隐含层的权值:');
%disp(input_to_hidden_weights);
%disp('隐含层到输出层的权值:');
%disp(hidden_to_output_weights);
%disp('偏置值:');
%disp(bias);
这是数据
2.4
1.78
5.1
6.31
12.83
17.29
7.95
3.74
1.51
4.59
2.5
2.24
1.95
1.03
2.91
4.46
13.44
21.67
8.84
11.02
1.37
6.36
1.45
4.25
3.86
1.46
3.07
4.44
8.32
5.33
2.03
6.24
2.56
0.38
0.12
0.47
4.37
1.25
3
3.52
13.24
5.11
11.15
4.39
1.11
0.87
2.35
0.63
1.15
1.72
7.61
5.67
10.68
23.89
6.83
6.08
1.02
0.8
2.72
2.62
2.77
3.36
2.63
5.89
12.52
12.15
7.93
5.59
5.23
0.01
3.42
0.22
2.13
1.96
2.96
7.62
6.43
23.82
3.66
9.38
5.59
0.89
0.49
2.51
2.79
5.72
4.93
4.57
15.89
20.71
8.61
6.82
3.97
1.66
6.14
0.25
0.55
0.39
4.36
4.72
5.7
5.76
12.87
1.26
3.49
0.92
0.83
0.78
8.67
0.14
0.11
4.71
6.14
13.23
4.28
3.46
8.37
0.42
0.57
4.774
0.68
1.15
4.18
3.72
9.3
10.57
2.25
5.91
4.06
4.97
0.14
0.331
4.75
1.39
3.08
3.67
10.55
17.93
4.24
5.11
4.25
1.48
4.21
2.82
1.78
2.18
5.78
3.58
9.18
6.88
3.94
16.46
5.67
0.79
9.21
3.76
0.36
1.8
5.42
9.95
12.32
19.76
4.01
6.98
1.19
3.53
4.88
3.36
3.14
1.69
2.32
1.71
14.33
15
6.68
4.41
10.79
8.53
10.76
7.81
4.93
1.32
2.37
8.73
9.29
17.28
4.46
6.81
4.88
2.2
4.51
0.72
3.25
0.89
7.61
5.56
14.51
12.3
7.37
13.09
5.65
0.51
3.9
1.74
8.04
0.47
2.07
4.19
4.3
5.13
4.8
4.28
4.92
6.53
2.9
3.08
4.12
5.27
6.3
8.71
3.42
9.99
15.13
3.13
3.75
2.89
0.94
0.73
2.84
4.16
7.35
5.53
11.16
17.35
8.78
7.01
7.27
1.99
0.11
0.79
0.5
3.41
2.83
5.32
12.2
10.52
3.39
3.85
1.97
5.1
4.46
0.34
5.81
6.51
4.44
3.71
13.54
14.3
5.36
3.4
0.07
0.83
4.26
0.81
0.65
2.7
2.85
2.06
5.96
6.13
1.01
7.06
5.35
1.14
1.2
0.62


IP属地:广西1楼2024-03-20 16:37回复