使用CNN进行回归预测代码

最后更新于:2024-04-07 21:39:17

-使用波士顿房价预测作为演示案例。

-可以自由设置神经网络卷积层结构、池化层结构

-可以快速划分训练集、验证集、测试集

-程序运行完后自动绘制出收敛过程、训练集和测试集的预测结果对比、相对误差图、MAE/MSE/MAPE/RMSE/R等指标

-多种训练参数可设置,包括求解器、迭代次数、初始学习率等等

-可设置随机种子,保证每次运行结果保持一致

需要你做的基本只有导入数据和调参。

绝大多数流程都被封装固化到函数中,仿照案例导入你的数据即刻得到结果~

一、代码运行环境

MATLAB2018b及更新版本。

二、程序介绍

注:图标代表该m文件为脚本文件,可以直接运行;图标代表函数文件,在没有输入变量的情况下无法直接运行。更详细的解释可以看这里

1.scriptRegCNNs.m文件

使用波士顿城郊区域的房价数据集进行回归预测的案例,其中演示了FunRegCNNs函数的应用方式示范。

文件可以直接运行。程序运行完成后,将会画出如下图像:

收敛过程图

网络结构图

训练过程中损失值和RMSE收敛图

训练集拟合结果对比图

训练集预测结果相对误差

测试集拟合结果对比图

测试集预测结果相对误差

在命令行窗口还会打印出以下内容:

网络结构

每层网络的输出尺寸

MAE/MSE/MAPE/RMSE/R等指标

2.FunRegCNNs.m文件

使用CNN进行回归预测的快速实现函数。

代码说明:

function [foreData,foreDataTrain,net,info] = FunRegCNNs(dataX,dataY,trainR,cLayer,poolingLayer,fcLayer,options,figflag)
% 使用CNN进行回归预测的快速实现函数
% 该函数需要输入的数据为array数组型
% 输入:
% dataX:输入数据,R*Q的矩阵,R为输入数据的维度,Q为批次数,输入该变量时一定要注意维度正确
%           例:对于一维特征,每组数据长度为20,共1000组数据,则dataX的可以维度为:20*1000
% dataY:输出结果
% trainR:数据集中训练集划分比例,如:trainR = 0.6,则代表60%数据用于训练集,40%数据用于测试集

% cLayer:卷积层结构,为n*5的二维数组,其中n为卷积层的数量
% 列向的5个维度时分别代表滤波器的高、滤波器的宽、滤波器数量、步长、填充
% 例,cLayer = [3,1,16,1,1;3,1,32,1,0]时,则代表有两层卷积层,其中第一层滤波器高为3,宽为1,滤波器数量为16,步长1,填充1
%                                                第二次滤波器高为3,宽为1,滤波器数量为32,步长1,填充0

% poolingLayer:池化层结构,为长度为n*5的cell数据,其中n为池化层的数量,和卷积层层数相同。
% 列向的三个维度分别代表:1.池化层类型,分为'maxPooling2dLayer'和'averagePooling2dLayer'两种,如果不用池化层设置为'none'
%                         2.池化区域高度尺寸
%                         3.池化区域宽度尺寸
%                         4.步长
%                         5.填充
% 例如:
% poolingLayer = {'maxPooling2dLayer',2,1,2,1; 'averagePooling2dLayer',2,1,1,0};
% 代表第一个池化层为最大池化层,尺寸为2*1,步长2,填充1,第二个池化层为平均池化层,尺寸为2*1,步长1,填充0
% 注意!如果对应卷积层后不设置池化层,请在对应的位置设置为'none',0,0,0,0
% 比如cLayer设置为两层时,如果只想在第一层卷积层后对应有池化层,第二层卷积层后无池化层,那么池化层应该设置为:
% poolingLayer = {'maxPooling2dLayer',1,2,1,0;
%                 'none',0,0,0,0 }; %后边的四个0主要是占位,不起实际作用

% options:一些与网络训练等相关的设置,使用结构体方式赋值,比如 options.MaxEpochs = 1000,具体包括:
%             solverName:求解器,'sgdm'(默认) | 'rmsprop' | 'adam'
%             MaxEpochs:最大迭代次数,默认30
%             MiniBatchSize:批尺寸,默认128
%             GradientThreshold:梯度极限,默认为Inf
%             InitialLearnRate:初始化学习速率(默认0.005)
%             Plots:是否显示训练过程,'none' 为不显示(默认) | 'training-progress'为显示
%             ValidationFrequency:验证频率,即每间隔多少次迭代进行一次验证,默认50
%             LearnRateSchedule:即LearnRateSchedule是否在一定迭代次数后学习速率下降, LearnRateSchedule ='piecewise'为使用,'none'为不使用(默认)
%             LearnRateDropPeriod:即LearnRateDropPeriod学习速率下降时的迭代数,默认为10
%             LearnRateDropFactor:即LearnRateDropFactor学习速率下降因子,下降后变为LearnRateDropFactor*InitialLearnRate,LearnRateSchedule为0时可以赋0,默认为0.1
%             (未启用)NorFlag:即Normalization Flag,设置为1时则在程序中进行数据归一化和反归一化操作,否则不进行,建议设置为1
%             SeedFlag:随机种子标志,设置为1时启用随机种子,(默认为1)
% fcLayer:全连接层,可以设置多层,如果设置fcLayer=[],则在网络结构中只包含一个全连接层,输出的维度与数据类别相同。
%                                  如果设置fcLayer为数组,则代表在上边的全连接层之前再加入对应数量的全连接层和ReLU层
%                                  例如设置fcLayer=[32,16],则代表在共有三个全连接层,第一个是fullyConnectedLayer(32)+ReLU,第二个是fullyConnectedLayer(16)+ReLU,
%                                                           第三个是fullyConnectedLayer(numClasses)
% figflag:是否画图,'on'为画图,'off'为不画
% 输出:
% foreData:测试集的回归预测结果
% foreDataTrain:训练集的回归预测结果
% net:训练好的网络
% info:神经网络训练相关参数,如loss值、准确度等

3.EvaForeEffect.m文件

用于评价时间序列预测效果各个量化指标的通用函数。可以计算MAE/MSE/MAPE/RMSE/R2/R等

function ind = EvaForeEffect(realData,foreData,indNamesCell)
% 用于评价时间序列预测效果各个量化指标的通用函数
% 输入:
% realData:真实值
% foreData:预测值
% indNamesCell:拟进行预测评价指标名称,该变量为cell类型,其中包含的指标名称为字符串,指标名称在下边列表中:
% 目前支持的指标(2021.12.5):
% MSE:均方误差(Mean Square Error)
% RMSE:均方根误差(Root Mean Square Error)
% MAE:平均绝对误差(Mean Absolute Error)
% MAPE:平均绝对百分比误差(Mean Absolute Percentage Error)
% R2:决定系数(R2-R-Square)
% R:相关系数
% 如果想获取MSE、MAE两个指标,则设置:indNamesCell = {'MSE','MAE'}
% 输出:
% ind:预测效果评价指标结果数组,其评价指标值顺序与indNamesCell一一对应

三、快速开始

1.运行测试脚本

先在MATLAB里打开下载好的文件夹,然后运行scriptRegCNNs.m程序,程序运行完毕后如果没报错,且正常画出上述图像,则说明运行环境正常,程序正确。

2.修改仿真数据/导入数据

复制一个scriptRegCNNs.m的文件副本,在这个副本里做如下修改:

根据你的文件类型的不同(excel,txt,csv等),将数据导入MATLAB的方法有所不同。同学们可以看博主针对常用文件的导入方法的这个教程,教程上未包含的数据类型,大家可以再参考这个文档

3.实现CNN回归预测

参照脚本文件中第三、四步,根据需要调整相关参数。

运行程序即可。

四、关于完整版与公开版代码

功能完整版公开版
数据导入、参数设置、实现滤波
软件全部源码(函数m文件)×
画图无水印×
最大迭代次数不限制100
导出预测结果、训练好的网络模型、神经网络训练相关参数(如loss值、准确度)等可导出不可导出

五、获取公开版程序(需使用电脑浏览器打开)

CNN回归预测代码公开版

六、获取完整版程序(使用电脑浏览器或者手机浏览器打开)

获取通道一(淘宝):点击此处获取完整版程序

获取通道二(本页面):点击下面“立即支付”按钮,付款后获取完整版代码下载链接和售后联系方式~本通道处于测试阶段,使用该通道可以额外优惠(仅需76元)。付款完成后刷新一下本页面即可看到下载链接。

您需要先支付 76元 才能查看此处内容!立即支付

七、完整版代码重要更新

20231019 完成初版代码

八、常见问题

无。