%% 清除环境变量
clear all
clc
warning off
nntwarn off
%% 风电数据的预处理
%数据归一化
data=xlsread('p.xls','sheet1','A1:A744');
n=length(data);
X=zeros(n,1);
for i=1:n
X(i)=(data(i)-min(data))/(max(data)-min(data));
end
tau = 1; % 时延 21
m =8; % 嵌入维数 5
train_num = 720; % 训练样本数
test_num = 24; % 测试样本数
% 混沌序列的相空间重构 (phase space reconstruction)
x_train = X(1:train_num);
x_test = X(train_num-(m-1)*tau:train_num+test_num);
[xn_train,dn_train] = PhaSpaRecon(x_train,tau,m);
[xn_test,dn_test] = PhaSpaRecon(x_test,tau,m);
xn_train=xn_train';
dn_train=dn_train';
xn_test=xn_test';
dn_test=dn_test';
%% 选择回归预测分析最佳的SVM参数c&g
% 首先进行粗略选择:
[bestmse,bestc,bestg] = SVMcgForRegress(dn_train,xn_train,-8,8,-8,8);
% 打印粗略选择结果
disp('打印粗略选择结果');
str = sprintf( 'Best Cross Validation MSE = %g Best c = %g Best g = %g',bestmse,bestc,bestg);
disp(str);
% 根据粗略选择的结果图再进行精细选择:
[bestmse,bestc,bestg] = SVMcgForRegress(dn_train,xn_train,-6,6,-6,6,3,0.5,0.5,0.05);
% 打印精细选择结果
disp('打印精细选择结果');
str = sprintf( 'Best Cross Validation MSE = %g Best c = %g Best g = %g',bestmse,bestc,bestg);
disp(str);
%% 利用最佳的参数c&g进行SVM网络训练和测试
%网络训练
cmd = ['-c ', num2str(bestc), ' -g ', num2str(bestg) , ' -s 3 -p 0.01'];
model = svmtrain(dn_train,xn_train,cmd);
%网络测试
dn_pred=svmpredict(dn_test,xn_test,model);
dn_pred=dn_pred*(max(data)-min(data))+min(data);
%dn_test=dn_test*(max(data)-min(data))+min(data);
% dn_pred=data(960:1151);
dn_test= data(train_num+1:train_num+test_num);
%误差分析
err = dn_pred-dn_test;%绝对误差
err_mse = mse(err)
err_mae = mae(err)
re=abs(dn_pred-dn_test)./dn_test;%相对误差
re_mean = mean(re)
re_max = max(re)
re_min = min(re)
%% yuhua 2016/10/15
err = abs(dn_pred-dn_test);%绝对误差
[a,b]=size(err);
if a>b
a=a;
else
a=b;
end
err1=sum(err);
MAE=err1/a % MAE
re=abs(dn_pred-dn_test)./dn_test;
err2=sum(re);
MRE=100*err2/a % MRE
err3=sum(err.*err);
RMSE=sqrt(err3/a) % RMSE
C=cov(dn_pred,dn_test);%相关系数
c=C(1,2)/(sqrt(var(dn_pred))*sqrt(var(dn_test)))
figure;
subplot(211);
plot(1:length(err),dn_test,'r+:',1:length(err),dn_pred,'b*-');
title('真实值(+)与预测值(*)')
subplot(212);
plot(re,'k');
title('预测相对误差')
评论0