回归预测 | MATLAB实现GMDH自组织网络模型多输入单输出

回归预测 | MATLAB实现GMDH自组织网络模型多输入单输出

目录

    • 回归预测 | MATLAB实现GMDH自组织网络模型多输入单输出
      • 效果一览
      • 基本介绍
      • 模型构建
      • 程序设计
      • 学习总结
      • 参考资料

效果一览

回归预测 | MATLAB实现GMDH自组织网络模型多输入单输出_第1张图片

回归预测 | MATLAB实现GMDH自组织网络模型多输入单输出_第2张图片

基本介绍

GMDH自组织网络模型是自组织数据挖掘中的一种模型方法,是基于计算机科学和神经网络的迅速发展而产生和发展的.在信息爆炸和信息不完全的求解条件下,自组织方法能够有效避免个人主观因素的干扰.,是前苏联乌克兰科学院的 1968年运用多层神经网络原理和品种改良假说提出的一种复杂非线性系统的启发式自组织建模方法,以 K-G多项式为基础通过不断筛选组合建立非线性系统的模型,对高阶非线性系统的辨识很有效。GMDH神 经 网 络 是 前 馈 神 经 网络中一种用于预测的实用神经网络,其特点是网络结构不固定,在训练过程中不断变化。GMDH神经网络具有以下特点:
(1)建 模 过 程 自 组 织 控 制,不 需 任 何 初 始假设;
(2)最优复杂性及高精度预测;
(3)能够自组织多层神经网络每层的最佳结构,即能够自动保留有用变量和删除多余变量;
(4)能够自动选择最佳网络层数和每层的神经元数目。GMDH 算法由系统各输入单元交叉组合产生一系列的活动神经元,其中每一神经元都具有选择最优传递函数的功能,再从已产生的一代神经元中选择若干与目标变量最为接近的神经元,被选出神经元强强结合再次产生新的神经元,重复这样的优势遗传、竞争生存和进化的过程,直至具有最佳复杂性的模型被选出。

模型构建

回归预测 | MATLAB实现GMDH自组织网络模型多输入单输出_第3张图片
回归预测 | MATLAB实现GMDH自组织网络模型多输入单输出_第4张图片

回归预测 | MATLAB实现GMDH自组织网络模型多输入单输出_第5张图片

程序设计

  • 完整程序和数据下载:GMDH自组织网络模型多输入单输出完整程序和数据
  • 运行主程序MainGMDH.m即可。
%% GMDH parametes
PSD=[6 4 2];% Number max allowed neron in each layer
validateCof=.20;
%% Modeling
nSamples=length(x(:,1));
nValition=ceil(validateCof*nSamples);
nTrain=nSamples-nValition;
Perm = randperm(nSamples);
trainIndex = Perm(1:nTrain);
validationIndex=Perm(nTrain+1:end);
trainedGMDH=GMDH(PSD,x(trainIndex,:),t(trainIndex,:));
outputs=ApplyGMDH(trainedGMDH,x(validationIndex,:));
orginalVector=t(validationIndex,:);
%% Resultes 

figure;
PlotResults(t(validationIndex,:), outputs, 'Validation');

figure;
PlotResults(t(trainedGMDH.suffleList_train,:), trainedGMDH.Layers{end}.value, 'Train Data');

function PlotResults(Targets, Outputs, Title)
    Errors = Targets - Outputs;
    MSE = mean(Errors.^2);
    RMSE = sqrt(MSE);
    ErrorMean = mean(Errors);
    ErrorStd = std(Errors);
    
    subplot(2,2,[1 2]);
    plot(Targets);
    hold on;
    plot(Outputs);
    legend('Targets','Outputs');
    ylabel('Targets and Outputs');
    grid on;
    title(Title);
    
    subplot(2,2,3);
    plot(Errors);
    title(['MSE = ' num2str(MSE) ', RMSE = ' num2str(RMSE)]);
    ylabel('Errors');
    grid on;
    
    subplot(2,2,4);
    histfit(Errors, 50);
    title(['Error Mean = ' num2str(ErrorMean) ', Error StD = ' num2str(ErrorStd)]);

end
unction output1=ApplyGMDH(inputGMDH,X)
    
    %for each layer calculate output value
    output=X;
    for i=1:numel(inputGMDH.Layers)
      output=CalculateLayerOutput(inputGMDH.Layers{i},output);
    end
    output1=output;
end

function y=CalculateLayerOutput(L,X)
    m = size(X,1);
    N = numel(L);
    y = zeros(m,N);
    for i=1:numel(L)
        A=VolterraSeries(X(:,L(i).path(1)),X(:,L(i).path(2)));
        y(:,i) = A*L(i).Coff;
    end
end
function Y = VolterraSeries(x1,x2)
    y1=ones(1,numel(x1));
    y2=x1(:,1)';
    y3=x2(:,1)';
    y4= x1(:,1).^2';
    y5=x2(:,1).^2';
    y6=(x1(:,1).*x2(:,1))';
    Y =[y1;y2;y3;y4;y5;y6]';
end

学习总结

根据真实系统及采集到的数据的状况,采用GMDH算法能够建立非线性模型,模型的形式也不因我们的主观意愿而定。GMDH 算法具有以下一些优点和特点:
1.智能化建模程度高。在建模过程中尽可能地限制建模者的参加而赋予计算机选择的充分自由。建模者要完成的仅仅是提供样本数据和外准则,建模的结果与建模者对研究对象模型的主观想象无关,保证了模型选择的客观性。传统统计模型方法(包括经济计量模型方法)是无法做到这点的。
2.能得到显示表达模型,从而有利于人们进行系统的因素分析。
3.具有很强的抗干扰性因而能进行高精度预测。它从数据驱动的角度出发,通过选择准则的运用使网
络结构达到最优复杂性,从而避免了模型的过拟合及不足拟合,使得算法即使在一定数据噪声干扰的情况下也能找出符合系统内在规律的真实模型。

参考资料

[1] https://blog.csdn.net/kjm13182345320/article/details/127361354?spm=1001.2014.3001.5502
[2] https://blog.csdn.net/kjm13182345320/article/details/127299141?spm=1001.2014.3001.5502
[3] https://blog.csdn.net/kjm13182345320/article/details/127153216?spm=1001.2014.3001.5502

你可能感兴趣的:(回归预测,1024程序员节,GMDH,自组织网络模型,多输入单输出,回归预测)