【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; % 训练集比例
四、效果展示
左图为优化后,右图为优化前。
优化后超参数
。
五、代码获取
后台私信回复“28”可获取下载链接。