机器学习(3.1)

使用神经网络根据温度、湿度数据,预测风速

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. 微地形环境下输电线路微气象分析与预测技术
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值