【KELM预测】基于核极限学习机KELM实现数据预测Matlab代码

253 阅读2分钟

1 简介

由于风能的随机性和间歇性,风电场的发电输出功率往往具有很强的波动性,这将对电网造成极大的冲击,给电网计划和调度带来困难与挑战。因而,精确可靠的风电功率预测对优化电网运行的成本和提高电力系统的可靠性极其重要。目前,借助现代统计方法的预测模型,如神经网络、支持向量机等已被广泛应用到超短期及短期风电功率预测中。极限学习机(Extreme Learning Machine,ELM)作为一种新型的单隐层前馈神经网络(Single hidden Layer Feedforward Neural Networks,SLFNs),它能以极快的学习速度获得良好的推广性能,并在风电功率超短期及短期预测中已有成功的应用。在ELM的基础上,核极限学习机(Kernel Extreme Learning Machine,KELM)以核函数表示未知的隐含层非线性特征映射,通过正则化最小二乘算法计算网络的输出权值,并且该方法无需主观的设定网络隐含层节点的数目。为进一步提高风电功率超短期与短期预测的精度,本文以KELM方法为主线,研究其在风电功率组合预测及单一预测方面的应用。

2 部分代码

clc
clear all

DataSetName = 'waveform';           %以matlab格式存储的数据集名称
TrainSamplesPartio = 0.5;            %每类训练样本所占比例
RegularCoef = 10;                    %正则化系数
KernelFunctName = 'rbf';             %核函数名
KernelArgs = [10];                   %核函数参数矩阵


DataSet = load(DataSetName, '-mat');
DataSet = getfield(DataSet, DataSetName);
KindIdx = DataSet(:,1);                     %获取类别号
KindCount = length(unique(KindIdx));        %总类别数
SortedDataSet = sortrows(DataSet, 1);       %按类标号排列数据
clear DataSet

EachKindCount = zeros(1,KindCount);         %每类数据个数
for i=1:KindCount
   EachKindCount(i) = sum(sum( i == SortedDataSet(:,1)));  %第i类数据个数
end


end
clear TrainTemp TestTemp TrainDataEachKind TestDataEachKind 

%统计结果
[TrainingTime, TestingTime, TrainingAccuracy, TestingAccuracy] = elm_kernel(TrainData, TestData, 1,RegularCoef, KernelFunctName,KernelArgs);
%格式化输出相关信息,可根据自己需要修改
fprintf('Run Information:\n')
fprintf('KernelFuctName:%s() ',upper(KernelFunctName));
fprintf('Kernel_args:[')
disp(KernelArgs)
fprintf('\b\b   ] RegularCoef:%d\n\n',RegularCoef);
fprintf('+-----------------------------------------------+\n')
fprintf('|KindIdx | EachKindCount | EachTrainKindCount |\n');
fprintf('+-----------------------------------------------+\n')
Msgemat='| %2d     |%9d     |%11d         |\n';
for i=1:KindCount
   fprintf(Msgemat, i, EachKindCount(i), TrainSamCountEachKind(i));
   fprintf('+-----------------------------------------------+\n')
end
fprintf('\n')
fprintf('+------------------------------------------------------+\n')
fprintf('| TrainTime | TestTime | TrainAccuracy | TestAccuracy |\n')
MsgMat'| %6.2fs |   %4.2fs |   %4.2f       |     %4.2f   |\n';
fprintf('+------------------------------------------------------+\n')
fprintf(MsgMat, TrainingTime, TestingTime, TrainingAccuracy, TestingAccuracy);
fprintf('+------------------------------------------------------+\n')

3 仿真结果

4 参考文献

[1]李大超. 基于极限学习机的风电功率预测研究[D]. 兰州交通大学.

部分理论引用网络文献,若有侵权联系博主删除。

5 MATLAB代码与数据下载地址

见博客主页头条