【GMDH】预测帕拉州东南部的月降雨量(Matlab代码实现)

简介: 【GMDH】预测帕拉州东南部的月降雨量(Matlab代码实现)

💥1 概述

GMDH理论是近年来新兴的一种自组织数据挖掘理论,尤其适用于诸如经济系统一类的复杂系统建模;而计量经济学充分吸收了经济、统计、数学等多学科的成熟理论,回归模型作为计量经济学的主要研究工具已经成为权威的经济问题分析手段。目前关于GMDH理论与回归分析之间的交叉研究还很少,关于GMDH算法对模型质量的评价工作也并不多见。本文着眼于GMDH理论与回归分析之间的结合研究,其意义在于:运用GMDH理论来改进回归模型的预测效果,运用计量经济模型的统计检验来补充GMDH模型评价工作,充分结合两个领域的优势,共同促进两个理论的进一步完善和发展。 结合GMDH理论和计量经济学理论两个领域的知识,相互补充以进行理论间的交叉研究,首先综述了GMDH理论与计量经济学理论的优势与不足,然后从理论和实证两方面展开研究,进行两者的交叉改进工作。本文章将在Matlab中使用GMDH和RNA-MLP进行预测帕拉州东南部的月降雨量,从显著性检验、数据划分和外准则以及多重共线性三个方面对GMDH和计量经济学建模进行了比较研究;GMDH方法的统计完善,将显著性检验嵌入GMDH算法并对新算法通过编程来实现,使建立的模型保持了GMDH模型的优点。


📚2 运行结果

部分代码:

%clc;
%clear;
%close all;
%% Load Data
%[Inputs, Targets] = house_dataset; % its an Example for Entering Data
%data = load('chemical_data_file');
%Inputs = data.Inputs;
%Targets = data.Targets;
%t=cputime; 
load('./DADOS.mat')
Inputs = DADOS(:,1:25)';
Targets = DADOS(:,33)';
nData = size(Inputs,2);
Perm = randperm(nData);
% Train Data
pTrain = 0.7;
nTrainData = round(pTrain*nData);
TrainInd = Perm(1:nTrainData);
TrainInputs = Inputs(:,TrainInd);
TrainTargets = Targets(:,TrainInd);
% Test Data
pTest = 1 - pTrain;
nTestData = nData - nTrainData;
TestInd = Perm(nTrainData+1:end);
TestInputs = Inputs(:,TestInd);
TestTargets = Targets(:,TestInd);
%% Create and Train GMDH Network
params.MaxLayerNeurons = 14;   % Maximum Number of Neurons in a Layer
params.MaxLayers = 15;         % Maximum Number of Layers
params.alpha = 0.4;              % Selection Pressure
params.pTrain = 0.7;           % Train Ratio
%% Phase I
tic
N=10;                          % number of loops to gain "Mean" RMSE
                               % higher N cause more precission
EvaluationRMSEs=zeros(N,1);
disp('Evaluation of the netwoerk by RMSE please wait...')
Egmdh=cell(N,1);
for n=1:N
    gmdh = GMDH(params, TrainInputs, TrainTargets);
    EvaluationRMSEs(n)=gmdh.Layers{end}.RMSE2;
    Egmdh{n}=gmdh;
end
clc;
%  If the "Mean" RMSE is needed use this code :
% PossibleGoodRMSE=mean(EvaluationRMSEs);
%  If the "Minimum" RMSE is needed use this code :
PossibleGoodRMSE=min(EvaluationRMSEs);     
%% Phase II :
[~,Sortorder]=sort(EvaluationRMSEs);
Egmdh=Egmdh(Sortorder);
MaximumVariance=.1;
for m=1:N
    Variance=abs(Egmdh{m}.Layers{end}.RMSE2-PossibleGoodRMSE)/PossibleGoodRMSE;
    if Variance<MaximumVariance
        Truegmdh=Egmdh{m};
       break;
    end
end
MaxLayerNeurons=params.MaxLayerNeurons;
for MaxLayerNeurons=2:MaxLayerNeurons
    params.MaxLayerNeurons=MaxLayerNeurons;
    A=NonShuffleGMDH(Truegmdh,params);
    plot(MaxLayerNeurons,A.RMSE,'o','markerfacecolor','r')
    xlabel('Neurons')
    ylabel('RMSE')
    hold on
    grid on
    if MaxLayerNeurons==2        % In the first Loop defineing evaluation point
        Network=A;
    else
        if A.RMSE<Network.RMSE
            Network=A;
        end
    end
end
%% Phase III
% Plot Neuroal Network
%Network=A;              % In this point we make the program goes fo the last network
                        % (Network with MaxLayerNeurons) if you want the
                        % prog goes for the Optmised one simply "Comment"
                        % this Line
Plotneurones(Network);
% Evaluate GMDH Network
Outputs = ApplyGMDH(Network, Inputs);
TrainOutputs = Outputs(:,TrainInd);
TestOutputs = Outputs(:,TestInd);
tempo_execucao = toc
% Show Results
figure;
PlotResults(TrainTargets, TrainOutputs, 'Train Data');
%figure;
%PlotResults(TestTargets, TestOutputs, 'Test Data');
%figure;
%plotregression(TrainTargets, TrainOutputs, 'Train Data')
%figure;
%PlotResults(Targets, Outputs, 'All Data');
%if ~isempty(which('plotregression'))
    %figure;
    %plotregression(TrainTargets, TrainOutputs, 'Train Data', ...
                  % TestTargets, TestOutputs, 'TestData', ...
                  % Targets, Outputs, 'All Data');
%end

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]Elton Rafael Alves, Márcio Nirlando Gomes Lopes, Fabricio Silva Sales, Andson Marreiros Balieiro, Adônis Ferreira Raiol Leal (2023) A GMDH Approach for Forecast Monthly Rainfall in Southeast of Pará [Source Code].


[2]鲁茂.改进的GMDH算法及其应用[J].软科学,2008(04):17-20.


🌈4 Matlab代码实现

相关文章
|
4月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
226 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
4月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
142 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
4月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
111 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
|
7月前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
基于混合整数规划的微网储能电池容量规划(matlab代码)
基于混合整数规划的微网储能电池容量规划(matlab代码)
|
7月前
|
算法 调度
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
|
7月前
|
Serverless
基于Logistic函数的负荷需求响应(matlab代码)
基于Logistic函数的负荷需求响应(matlab代码)
|
7月前
|
数据安全/隐私保护
地震波功率谱密度函数、功率谱密度曲线,反应谱转功率谱,matlab代码
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
|
7月前
|
算法 调度
面向配电网韧性提升的移动储能预布局与动态调度策略(matlab代码)
面向配电网韧性提升的移动储能预布局与动态调度策略(matlab代码)
|
7月前
|
运维 算法
基于改进遗传算法的配电网故障定位(matlab代码)
基于改进遗传算法的配电网故障定位(matlab代码)

热门文章

最新文章