【MATLAB第28期】基于MATLAB的GWO-GMDH时间序列预测模型
一、模型简介
-
GMDH(Group Method of Data Handling,数据处理的群组方法)是一种经典的机器学习算法,它可以用于多输入单输出的预测问题,其主要思想是通过组合多个单元来构建一个多项式模型,并通过逐步加入新的输入变量来不断改进模型的精度和泛化能力。
-
虽然 GMDH 可以用于预测问题,但它不是一个端到端的神经网络模型。在 GMDH
中,数据处理和特征提取是通过组合不同的单元来完成的,而没有像神经网络那样明确的输入层、隐藏层和输出层。此外,GMDH 的组合过程是通过选择最优的模型来完成的,而不是通过反向传播等优化算法来训练模型。 因此,尽管 GMDH 可以用于多输入单输出的预测问题,但它并不满足端到端神经网络的特征,不能用于更复杂的任务,如图像分类、语音识别等。对于这些任务,需要使用更复杂的神经网络模型,如卷积神经网络(CNN)、循环神经网络(RNN)等。总之,GMDH 可以作为一种有效的预测算法,但它并不是一个端到端的神经网络模型,不能满足复杂任务的要求。
二、模型思路
- 通过GWO灰狼群智能算法,优化GMDH模型适应度函数,其中,适应度函数可以选择测试集的RMSE值。超参数可选择MaxLayerNeurons
一层(Layer)中最大神经元个数、 MaxLayers 最大层数(Layers)和alpha选择压力。
三、代码展示
clc;
clear;
close all;
%% 加载数据
data = load('global_ice_volume');
x = data.x;
Delays = [1 2 3 4 5];%延迟五个值 即滑动窗口值
[Inputs, Targets] = CreateTimeSeriesData(x,Delays);% 创建时间序列数据
nData = size(Inputs,2);%输入样本数量
% Perm = randperm(nData);
Perm = 1:nData;%1:214
% Train Data
pTrain = 0.7;%训练集70%
nTrainData = round(pTrain*nData);%训练集样本个数
TrainInd = Perm(1:nTrainData);%1:150
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);%测试输出
save data
%% Create and Train GMDH Network
params.MaxLayerNeurons = 25; % 一层(Layer)中最大神经元个数
params.MaxLayers = 5; % 最大层数(Layers)
params.alpha = 0; % 选择压力
params.pTrain = 0.7; % 训练集比例
四、效果展示
左图为优化后,右图为优化前。
优化后超参数。
五、代码获取
1.阅读首页置顶文章
2.关注CSDN
3.根据自动回复消息,回复“28期”以及相应指令,即可获取对应下载方式。