Skip to content

Commit d3573ee

Browse files
authored
Update main.m
1 parent f846b1b commit d3573ee

1 file changed

Lines changed: 51 additions & 57 deletions

File tree

  • 038_Time series forecasting based on least squares support vector machine
Lines changed: 51 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,26 @@
1-
%% 清空环境变量
2-
warning off % 关闭报警信息
3-
close all % 关闭开启的图窗
4-
clear % 清空变量
5-
clc % 清空命令行
1+
%% 清空环境变量
2+
warning off % 关闭报警信息
3+
close all % 关闭开启的图窗
4+
clear % 清空变量
5+
clc % 清空命令行
66

7-
%% 添加路径
7+
%% 添加路径
88
addpath('LSSVM_Toolbox\')
99

10-
%% 导入数据(时间序列的单列数据)
11-
result = xlsread('数据集.xlsx');
10+
%% 导入数据(时间序列的单列数据)
11+
result = xlsread('数据集.xlsx');
1212

13-
%% 数据分析
14-
num_samples = length(result); % 样本个数
15-
kim = 15; % 延时步长(kim个历史数据作为自变量)
16-
zim = 1; % 跨zim个时间点进行预测
13+
%% 数据分析
14+
num_samples = length(result); % 样本个数
15+
kim = 15; % 延时步长(kim个历史数据作为自变量)
16+
zim = 1; % 跨zim个时间点进行预测
1717

18-
%% 划分数据集
18+
%% 划分数据集
1919
for i = 1: num_samples - kim - zim + 1
2020
res(i, :) = [reshape(result(i: i + kim - 1), 1, kim), result(i + kim + zim - 1)];
2121
end
2222

23-
%% 数据集分析
24-
outdim = 1; % 最后一列为输出
25-
num_size = 0.7; % 训练集占数据集比例
26-
num_train_s = round(num_size * num_samples); % 训练集样本个数
27-
f_ = size(res, 2) - outdim; % 输入特征维度
28-
29-
%% 划分训练集和测试集
23+
%% 划分训练集和测试集
3024
temp = 1: 1: 922;
3125

3226
P_train = res(temp(1: 700), 1: 15)';
@@ -37,109 +31,109 @@
3731
T_test = res(temp(701: end), 16)';
3832
N = size(P_test, 2);
3933

40-
%% 数据归一化
34+
%% 数据归一化
4135
[p_train, ps_input] = mapminmax(P_train, 0, 1);
4236
p_test = mapminmax('apply', P_test, ps_input);
4337

4438
[t_train, ps_output] = mapminmax(T_train, 0, 1);
4539
t_test = mapminmax('apply', T_test, ps_output);
4640

47-
%% 转置以适应模型
41+
%% 转置以适应模型
4842
p_train = p_train'; p_test = p_test';
4943
t_train = t_train'; t_test = t_test';
5044

51-
%% 参数设置
52-
type = 'f'; % 模型类型f回归,c分类
53-
gam = 100; % 核函数参数
54-
sig2 = 100; % 惩罚参数
55-
kernel = 'RBF_kernel'; % RBF 核函数
56-
proprecess = 'preprocess'; % 是否归一化
45+
%% 参数设置
46+
type = 'f'; % 模型类型f回归,c分类
47+
gam = 100; % 核函数参数
48+
sig2 = 100; % 惩罚参数
49+
kernel = 'RBF_kernel'; % RBF 核函数
50+
proprecess = 'preprocess'; % 是否归一化
5751

58-
%% 建立模型
52+
%% 建立模型
5953
model = initlssvm(p_train, t_train, type, gam, sig2, kernel, proprecess);
6054

61-
%% 训练模型
55+
%% 训练模型
6256
model = trainlssvm(model);
6357

64-
%% 模型预测
58+
%% 模型预测
6559
t_sim1 = simlssvm(model, p_train);
6660
t_sim2 = simlssvm(model, p_test );
6761

68-
%% 数据转置
62+
%% 数据转置
6963
t_sim1 = t_sim1'; T_train = T_train';
7064
t_sim2 = t_sim2'; T_test = T_test' ;
7165

72-
%% 数据反归一化
66+
%% 数据反归一化
7367
T_sim1 = mapminmax('reverse', t_sim1, ps_output);
7468
T_sim2 = mapminmax('reverse', t_sim2, ps_output);
7569

76-
%% 均方根误差
70+
%% 均方根误差
7771
error1 = sqrt(sum((T_sim1' - T_train).^2) ./ M);
7872
error2 = sqrt(sum((T_sim2' - T_test ).^2) ./ N);
7973

80-
%% 绘图
74+
%% 绘图
8175
figure
8276
plot(1: M, T_train, 'r-', 1: M, T_sim1, 'b-', 'LineWidth', 1)
83-
legend('真实值', '预测值')
84-
xlabel('预测样本')
85-
ylabel('预测结果')
86-
string = {'训练集预测结果对比'; ['RMSE=' num2str(error1)]};
77+
legend('真实值', '预测值')
78+
xlabel('预测样本')
79+
ylabel('预测结果')
80+
string = {'训练集预测结果对比'; ['RMSE=' num2str(error1)]};
8781
title(string)
8882
xlim([1, M])
8983
grid
9084

9185
figure
9286
plot(1: N, T_test, 'r-', 1: N, T_sim2, 'b-', 'LineWidth', 1)
93-
legend('真实值', '预测值')
94-
xlabel('预测样本')
95-
ylabel('预测结果')
96-
string = {'测试集预测结果对比'; ['RMSE=' num2str(error2)]};
87+
legend('真实值', '预测值')
88+
xlabel('预测样本')
89+
ylabel('预测结果')
90+
string = {'测试集预测结果对比'; ['RMSE=' num2str(error2)]};
9791
title(string)
9892
xlim([1, N])
9993
grid
10094

101-
%% 相关指标计算
95+
%% 相关指标计算
10296
% R2
10397
R1 = 1 - norm(T_train - T_sim1')^2 / norm(T_train - mean(T_train))^2;
10498
R2 = 1 - norm(T_test - T_sim2')^2 / norm(T_test - mean(T_test ))^2;
10599

106-
disp(['训练集数据的R2为:', num2str(R1)])
107-
disp(['测试集数据的R2为:', num2str(R2)])
100+
disp(['训练集数据的R2为:', num2str(R1)])
101+
disp(['测试集数据的R2为:', num2str(R2)])
108102

109103
% MAE
110104
mae1 = sum(abs(T_sim1' - T_train)) ./ M ;
111105
mae2 = sum(abs(T_sim2' - T_test )) ./ N ;
112106

113-
disp(['训练集数据的MAE为:', num2str(mae1)])
114-
disp(['测试集数据的MAE为:', num2str(mae2)])
107+
disp(['训练集数据的MAE为:', num2str(mae1)])
108+
disp(['测试集数据的MAE为:', num2str(mae2)])
115109

116110
% MBE
117111
mbe1 = sum(T_sim1' - T_train) ./ M ;
118112
mbe2 = sum(T_sim2' - T_test ) ./ N ;
119113

120-
disp(['训练集数据的MBE为:', num2str(mbe1)])
121-
disp(['测试集数据的MBE为:', num2str(mbe2)])
114+
disp(['训练集数据的MBE为:', num2str(mbe1)])
115+
disp(['测试集数据的MBE为:', num2str(mbe2)])
122116

123-
%% 绘制散点图
117+
%% 绘制散点图
124118
sz = 25;
125119
c = 'b';
126120

127121
figure
128122
scatter(T_train, T_sim1, sz, c)
129123
hold on
130124
plot(xlim, ylim, '--k')
131-
xlabel('训练集真实值');
132-
ylabel('训练集预测值');
125+
xlabel('训练集真实值');
126+
ylabel('训练集预测值');
133127
xlim([min(T_train) max(T_train)])
134128
ylim([min(T_sim1) max(T_sim1)])
135-
title('训练集预测值 vs. 训练集真实值')
129+
title('训练集预测值 vs. 训练集真实值')
136130

137131
figure
138132
scatter(T_test, T_sim2, sz, c)
139133
hold on
140134
plot(xlim, ylim, '--k')
141-
xlabel('测试集真实值');
142-
ylabel('测试集预测值');
135+
xlabel('测试集真实值');
136+
ylabel('测试集预测值');
143137
xlim([min(T_test) max(T_test)])
144138
ylim([min(T_sim2) max(T_sim2)])
145-
title('测试集预测值 vs. 测试集真实值')
139+
title('测试集预测值 vs. 测试集真实值')

0 commit comments

Comments
 (0)