使用神经网络根据温度、湿度数据,预测风速
clc;clear;
close all;
%% 数据集
data = xlsread('风力出力沿海地区.xlsx');
fengsu = data(2:481,9);%因变量
wendu = data(2:481,7);
shidu = data(2:481,8);
shuru = [wendu,shidu]';
shuchu = fengsu';
shuru_train = shuru(:,1:24*14);
shuchu_train = shuchu(1,1:24*14);
shuru_pre = shuru(:,24*14+1:end);
shuchu_real = shuchu(:,24*14+1:end)';
% data = [fengsu,wendu,shidu];
%% 归一化
[shuru_1, dataoutput1] = mapminmax(shuru_train,0,1);
shuru_pre_1 = mapminmax('apply',shuru_pre,dataoutput1);
[shuchu_1, dataoutput2] = mapminmax(shuchu_train,0,1);
%% 创建神经网络
net = newff(shuru_1,shuchu_1,5);
%% 设定参数
net.trainparam.epochs = 3000;
net.trainParam.goal = 1e-4;
net.trainParam.lr = 0.001;
%% 训练网络
net = train(net,shuru_1,shuchu_1);
%% 测试(预测)
shuchu_yuce = sim(net,shuru_pre_1);
%% 逆归一化
shuchu_pre_reverse = mapminmax('reverse',shuchu_yuce,dataoutput2);
for j=1:6
wind_yuce(j,:) = shuchu_pre_reverse(24*(j-1)+1:24*j);
end
% shuchu_real_reverse = mapminmax('reverse',shuchu_real,dataoutput);
%% 性能评价
error = abs(shuchu_pre_reverse - shuchu_real')./ shuchu_real';
N = size(shuchu_pre_reverse',1);
R2 = (N * sum(shuchu_pre_reverse .* shuchu_real') - sum(shuchu_pre_reverse) * sum(shuchu_real'))^2 / ((N * sum((shuchu_pre_reverse).^2) - (sum(shuchu_pre_reverse))^2) * (N * sum((shuchu_real').^2) - (sum(shuchu_real'))^2));
%% 画图
figure
plot(shuchu_pre_reverse,'r.-');
hold on
plot(shuchu_real,'k.-');
figure
plot(error,'k.');
红色为预测值,黑色为实际值。风速12m/s以上预测为12不影响功率的预测
偏差基本0.4以内,看着还行。
接着用支持向量机回归预测功率
clc;clear;
close all;
load windyuce3.mat
[~,~,raw] = xlsread('风力出力沿海地区.xlsx');%读取数据
ytestall = zeros(1,24*6);
for i=14:19
X = cell2mat(raw(2:24*i,4));%样本
Y =cell2mat( raw(2:24*i,3));%样本标签
%% 参数设置
gam = 10;sig2 = 0.2;%可以指定,也可以参数寻优找到
type = 'function (estimation)';
L_fold = 10; % L-fold crossvalidation
%% 模型训练和图形化显示
[alpha,b] = trainlssvm({X,Y,type,gam,sig2,'RBF_kernel','original'});
%% 利用训练模型进行预测
% Xt = cell2mat(raw(24*i+1:24*(i+1),4));
% for k=1:24
% if Xt(k,1)>12
% Xt(k,1)=12;
% end
% end
Xt = shuchu_pre_reverse(24*(i-14)+1:24*(i-13))';
Ytest = simlssvm({X,Y,type,gam,sig2,'RBF_kernel','original'},{alpha,b},Xt);
Ytest
%% 利用公式计算真实值,并与模型预测结果进行对比
YY = cell2mat( raw(24*i:24*(i+1),3));
ytestall(24*(i-14)+1:24*(i-13)) = Ytest';
end
xtall = cell2mat(raw(24*14+1:24*20,3))';
error = abs(ytestall-xtall)./xtall;
figure
plot(xtall,'ko-');
hold on
plot(ytestall,'r.-');
figure
plot(error)
使用预测的风速预测功率
存在较大偏差。
思考:
使用温度湿度预测风速,不如直接获取NWP风速数据,或者考虑其他方式预测风速,会更准确一些。
或者考虑缩短预测时间,从24小时,缩减到6小时,考虑预测前风速变化趋势。
风速的预测精度决定了功率的预测精度。若考虑具体选址地区的具体地形对宏观天气预报数据的影响,感觉还是采用统计法(神经网络、支持向量机之类的)较为方便,因为微气象总是受制于宏观气象,统计法通过大量数据训练可以精准预测,并且可以一直改进模型,免去物理方法需要布置大量采样装置的麻烦(主要还是用电脑也只能试试统计法)。
主要是通过这个问题学一下神经网络支持向量机在matlab中的使用方法。
请各位大佬批评建议指正!
参考文献:
bilibiliup主 推轱辘追星光的磕盐汪. 【MATLAB&机器学习】入门&进阶&提高
风电功率预测方法和准确性提升方案 - 中国电力网 (chinapower.com.cn)
谭风雷,丁心志,张 军,陈 昊,何嘉弘基于变化趋势和气象因子的加权负荷预测方法
李隆基1,郗晓光1,李志坚1,王晓光1,文清丰1,李琪冉2,周恺3,刘勇2,姚俊韬4. 微地形环境下输电线路微气象分析与预测技术