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+ %% 添加路径
88addpath(' 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+ %% 划分数据集
1919for i = 1 : num_samples - kim - zim + 1
2020 res(i , : ) = [reshape(result(i : i + kim - 1 ), 1 , kim ), result(i + kim + zim - 1 )];
2121end
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+ %% 划分训练集和测试集
3024temp = 1 : 1 : 922 ;
3125
3226P_train = res(temp(1 : 700 ), 1 : 15 )' ;
3731T_test = res(temp(701 : end ), 16 )' ;
3832N = size(P_test , 2 );
3933
40- %% 数据归一化
34+ %% 数据归一化
4135[p_train , ps_input ] = mapminmax(P_train , 0 , 1 );
4236p_test = mapminmax(' apply' , P_test , ps_input );
4337
4438[t_train , ps_output ] = mapminmax(T_train , 0 , 1 );
4539t_test = mapminmax(' apply' , T_test , ps_output );
4640
47- %% 转置以适应模型
41+ %% 转置以适应模型
4842p_train = p_train ' ; p_test = p_test ' ;
4943t_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+ %% 建立模型
5953model = initlssvm(p_train , t_train , type , gam , sig2 , kernel , proprecess );
6054
61- %% 训练模型
55+ %% 训练模型
6256model = trainlssvm(model );
6357
64- %% 模型预测
58+ %% 模型预测
6559t_sim1 = simlssvm(model , p_train );
6660t_sim2 = simlssvm(model , p_test ) ;
6761
68- %% 数据转置
62+ %% 数据转置
6963t_sim1 = t_sim1 ' ; T_train = T_train ' ;
7064t_sim2 = t_sim2 ' ; T_test = T_test ' ;
7165
72- %% 数据反归一化
66+ %% 数据反归一化
7367T_sim1 = mapminmax(' reverse' , t_sim1 , ps_output );
7468T_sim2 = mapminmax(' reverse' , t_sim2 , ps_output );
7569
76- %% 均方根误差
70+ %% 均方根误差
7771error1 = sqrt(sum((T_sim1 ' - T_train ).^2 ) ./ M );
7872error2 = sqrt(sum((T_sim2 ' - T_test ).^2 ) ./ N );
7973
80- %% 绘图
74+ %% 绘图
8175figure
8276plot(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 )]};
8781title(string )
8882xlim([1 , M ])
8983grid
9084
9185figure
9286plot(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 )]};
9791title(string )
9892xlim([1 , N ])
9993grid
10094
101- %% 相关指标计算
95+ %% 相关指标计算
10296% R2
10397R1 = 1 - norm(T_train - T_sim1 ' )^2 / norm(T_train - mean(T_train ))^2 ;
10498R2 = 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
110104mae1 = sum(abs(T_sim1 ' - T_train )) ./ M ;
111105mae2 = 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
117111mbe1 = sum(T_sim1 ' - T_train ) ./ M ;
118112mbe2 = 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+ %% 绘制散点图
124118sz = 25 ;
125119c = ' b' ;
126120
127121figure
128122scatter(T_train , T_sim1 , sz , c )
129123hold on
130124plot(xlim , ylim , ' --k' )
131- xlabel(' 训练集真实值' );
132- ylabel(' 训练集预测值' );
125+ xlabel(' 训练集真实值' );
126+ ylabel(' 训练集预测值' );
133127xlim([min(T_train ) max(T_train )])
134128ylim([min(T_sim1 ) max(T_sim1 )])
135- title(' 训练集预测值 vs. 训练集真实值' )
129+ title(' 训练集预测值 vs. 训练集真实值' )
136130
137131figure
138132scatter(T_test , T_sim2 , sz , c )
139133hold on
140134plot(xlim , ylim , ' --k' )
141- xlabel(' 测试集真实值' );
142- ylabel(' 测试集预测值' );
135+ xlabel(' 测试集真实值' );
136+ ylabel(' 测试集预测值' );
143137xlim([min(T_test ) max(T_test )])
144138ylim([min(T_sim2 ) max(T_sim2 )])
145- title(' 测试集预测值 vs. 测试集真实值' )
139+ title(' 测试集预测值 vs. 测试集真实值' )
0 commit comments