我在做基于支持向量机预测风电功率过程中遇到了一些问题,这是我写的程序,预测出来的结果误差很大,我用的matlab2014a,工具箱是1.8版的已上传。麻烦各位老师帮我看一下,不胜感激。
%用传统的LS-SVM对某一天的风力发电功率的预测
%把LSSVMlabv工具包装在工作目录下面
%这个程序同时适用于P58的预测
tic;%开始记时
load PA.txt; %
x=PA(20,:);
xtest=PA(21,:);
%归一化
MAX=max(x);
MIN=min(x);
x=(x-MIN)./(MAX-MIN);
%----------------------------------------------------------------
%构造输入输出矩阵
p=15;%从数据中可以看到风电功率基本是四个小时一个周期。
x=x';
Y_svm=x(p+1:end);
for i=1:p
X_svm(:,i)=x(i:end-p+i-1);
end
%---------------------------------------------------
%用LSSVM模型进行训练
gam = 10000;
sig2 = 2;
%---------------------------------------------------
type = 'function estimation';
kernel='RBF_kernel';
preprocess='preprocess';
[alpha,b]=trainlssvm({X_svm,Y_svm,type,gam,sig2,kernel,preprocess});
%model=trainlssvm(model);
% % 用LSSVM模型进行预测,构造预测向量
step_to_predict=96;%预测5月30日96个时刻的风电负荷
temp_matrix=x(end-p+1:end)';
%---------------------------------------------------
% 滚动预测5月31日的风电负荷
svm_multi=[];
for i=1:1:step_to_predict
Xt=temp_matrix;%先用前一天15个数据作为输入
Yt = simlssvm({X_svm,Y_svm,type,gam,sig2,kernel,preprocess},{alpha,b},Xt);
svm_multi=[svm_multi Yt];
temp_matrix=[temp_matrix(1,2:end) Yt];
end
svm_multi;%预测功率输出值
svm_multi=(svm_multi.*(MAX-MIN))+MIN;
f=1:96;svm_multi=svm_multi(1:96);
plot(f,svm_multi,'-r',f,xtest,'-b')
legend('预测值','真实值')
xlabel('九十六个时刻')
ylabel('对应的输出功率')
r1=1-sqrt(sum(((xtest-svm_multi)/850).^2)/96); %计算预测的准确率
%计算合格率
for i=1:96
if (1-(xtest(i)-svm_multi(i))/850)>0.75
B(i)=1;
else
B(i)=0;
end
end
r2=sum(B)/96;
toc