赞
踩
传统的点预测已经很难吸引审稿人的注意,容易被拒稿!今天为大家带来一期24年新算法——冠豪猪优化算法CPO优化极限学习机ELM,并结合改进自适应核密度估计ABKDE实现风光电功率区间概率预测代码,独家原创!适合作为创新点!直接替换Excel数据即可用!具体代码已放在最后,需要代码的朋友可直接拉到最后~
目录
冠豪猪优化器(CPO)是2024年1月由Mohamed Abdel-Basset等人提出的一种最新的基于自然启发的元启发式算法。成果发表在SCI中科院一区TOP期刊《Knowledge-Based Systems》,创新点非常足,目前尚无相关研究成果运用在预测的文献!
你先用,你就是创新!
CPO模拟了冠豪猪(CP)的四种防御策略包括视觉、声音、气味和身体攻击。该算法采用了探索和开发的机制,第一和第二防御策略(即视觉和声音)代表CPO的探索性行为,而第三和第四防御策略(即气味和身体攻击)代表CPO的开发性行为。
详细原文可参考如下文章:
Mohamed Abdel-Basset, Reda Mohamed, Mohamed Abouhawwash,Crested Porcupine Optimizer: A new nature-inspired metaheuristic, Knowledge-Based Systems, 2023, 111257,
利用CPO算法优化ELM算法的初始权重与偏置,减少人工调参的盲目性,从而实现点预测。
再来说下如何进行区间概率预测,传统点预测已不能满足专家的偏好,区间概率预测可提供更多不确定信息。
自适应带宽核函数密度估计(adaptive bandwidth kernel density estimation)是一种用于估计概率密度函数的非参数方法,它使用核函数对数据进行平滑处理,并通过自动选择合适的带宽参数来适应数据的本地特性。
在传统的核密度估计中,带宽参数控制着核函数的宽度,从而影响了平滑程度和估计的准确性。而自适应带宽核函数密度估计则通过将带宽参数作为每个数据点的函数来进行估计,从而使得每个数据点都有自己独立的带宽参数。自适应带宽核函数密度估计的一种常见方法是基于局部加权回归(local weighted regression)的方法。在这种方法中,对于每个数据点,通过对附近的数据点进行加权回归,来估计它周围的概率密度。权重的选择通常与距离有关,较近的数据点会获得更高的权重。自适应带宽核函数密度估计的优势在于它能够在不同的数据区域自动调整带宽参数,从而更好地适应数据的局部特性和密度变化。相比于固定带宽的方法,自适应带宽核函数密度估计可以提供更准确的概率密度估计,并更好地捕捉到密度函数的细节和变化。
简单放个图片感受一下:
Matlab
Excel输入,非常方便,如果想要替换数据直接将最后一列放输出(即想要预测的东西,功率等等),前面放特征即可!多变量单输出,包括点预测+概率预测+核密度估计曲线,MatlabR2021a及以上版本运行,提供多种置信区间!评价指标包括R2MAE、RMSE、MAPE、区间覆盖率picp、区间平均宽度百分比pinaw等
点预测效果图:
区间概率预测效果图:
概率密度估计图:
核密度估计曲线图:
可以看到,各置信区间下均取得了不错的结果,真实值与预测值非常贴合,效果非常不错,最后再来看看评价指标:
点预测包括四个评价指标,R2达到了0.99,区间预测的各个置信区间均有PINAW、PICP、CRPS、CWC四个指标,作为创新点非常不错~
程序主页面展示:
function [y,t,optw,gs,C,confb95,yb] = ABKDE(x,tin)
%参数初始化
M = 80; %带宽优化次数
WinFunc = 'Gauss'; %核函数 ('Gauss','Laplace','Cauchy') 默认使用鲁棒性最好的高斯核
bootsamp_num = 1*1e2; %每批样本迭代次数(采用bootstrap抽样法)
x = reshape(x,1,numel(x));
if nargin == 1 %没有给定待估计点
T = max(x) - min(x);
[mbuf,nbuf,dt_samp] = find( sort(diff(sort(x))),1,'first');
tin = linspace(min(x),max(x), min(ceil(T/dt_samp),1e3)); %生成待估计样本点
t = tin;
x_ab = x( logical((x >= min(tin)) .*(x <= max(tin))) ) ;
else %给定待估计点
T = max(tin) - min(tin);
x_ab = x( logical((x >= min(tin)) .*(x <= max(tin))) ) ;
[mbuf,nbuf,dt_samp] = find( sort(diff(sort(x_ab))),1,'first');
if dt_samp > min(diff(tin))
t = linspace(min(tin),max(tin), min(ceil(T/dt_samp),1e3));
else
t = tin;
end
end
clear mbuf nbuf;
dt = min(diff(t));
y_hist = histc(x_ab,t-dt/2)/dt; %#ok<*HISTC>
L = length(y_hist);
N = sum(y_hist*dt);
% 计算局部优化带宽
%窗口大小
WIN = logexp(linspace(ilogexp(max(5*dt)),ilogexp(1*T),M));
W = WIN; %带宽
c = zeros(M,L);
for j = 1:M
w = W(j);
yh = fftkernel(y_hist,w/dt);
%计算局部损失函数
c(j,:) = yh.^2 - 2*yh.*y_hist + 2/sqrt(2*pi)/w*y_hist;
end
optws = zeros(M,L);
for i = 1:M
Win = WIN(i);
C_local = zeros(M,L);
for j = 1:M
C_local(j,:) = fftkernelWin(c(j,:),Win/dt,WinFunc);
end
[mbuf,n] = min(C_local,[],1);
optws(i,:) = W(n);
end
点击下方小卡片,后台回复关键字,不区分大小写。关键字:
CPOELM
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。