今天为大家带来一期CNN-ELM实现多变量回归预测代码,独家原创!直接提供代码!知网用的人还很少!适合作为创新点!直接替换Excel数据即可用!具体代码已放在最后,需要代码的朋友可直接拉到最后~
原理简介
1.卷积神经网络(CNN)
什么是CNN:
CNN是一种深度学习模型,特别擅长处理图像数据。它通过卷积层自动从数据中提取特征,这些特征对于完成如分类或回归任务非常有用。
工作原理:
CNN通过一系列的卷积层、池化层(用于降维)和全连接层(决策层)工作。在卷积层,模型使用小的滤波器窗口在输入数据上滑动,计算窗口内数据和滤波器的点积,以此提取特征。
2.极限学习机(ELM)
什么是ELM:
ELM是一种快速的单隐层前馈神经网络,用于分类和回归。它的特点是隐藏层的权重初始化后不再调整,只需要计算输出层权重,大大加快了训练速度。
工作原理:
在ELM中,数据通过一个随机生成并固定不变的隐藏层传递,然后直接计算输出层的权重。这种方式简化了学习过程,因为它避免了复杂的反向传播过程。
3.CNN-ELM的结合
结合原理:
CNN-ELM通过将CNN的强大特征提取能力与ELM的快速学习速度相结合,来进行回归预测。首先,使用CNN自动从输入数据中提取重要特征。然后,这些特征被送入ELM来进行快速的回归预测。
工作流程:
简单来说,就是先用CNN学习输入数据的深层次特征,再将这些特征作为ELM的输入,利用ELM快速得到回归预测的结果。
4.优势
1.高效的特征提取:CNN能够自动并有效地从大量数据中提取有用特征。
2.快速训练:借助ELM,CNN-ELM可以实现迅速的训练过程,因为ELM避免了耗时的反向传播算法。
3.适用性广:结合了CNN和ELM的优点,使得CNN-ELM在处理各种回归问题时都表现出色,特别是在图像和序列数据上。
4.泛化能力强:通过有效的特征提取和快速训练,CNN-ELM能够在未见过的数据上也取得很好的预测效果。
实现步骤
1.导入数据
%% 导入数据
res = xlsread('数据集.xlsx');
%% 数据分析
num_size = 0.8; % 训练集占数据集比例
outdim = 1; % 最后一列为输出
num_samples = size(res, 1); % 样本个数
res = res(randperm(num_samples), :); % 打乱数据集(不希望打乱时,注释该行)
num_train_s = round(num_size * num_samples); % 训练集样本个数
f_ = size(res, 2) - outdim; % 输入特征维度
数据格式如下:Excel格式,最后一列放输出,前面几列放特征即可,特征数量可以不同,非常方便!
2.数据归一化
%% 划分训练集和测试集
P_train = res(1: num_train_s, 1: f_)';
T_train = res(1: num_train_s, f_ + 1: end)';
M = size(P_train, 2);
P_test = res(num_train_s + 1: end, 1: f_)';
T_test = res(num_train_s + 1: end, f_ + 1: end)';
N = size(P_test, 2);
%% 数据归一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input);
[t_train, ps_output] = mapminmax(T_train, 0, 1);
t_test = mapminmax('apply', T_test, ps_output);
3.构造CNN网络结构
4.ELM预测
%% 创建模型
num_hiddens = 30; % 隐藏层节点个数
activate_model = 'sig'; % 激活函数
[IW, B, LW, TF, TYPE] = elmtrain(p_train, t_train, num_hiddens, activate_model, 0);
%% 仿真测试
t_sim1 = elmpredict(p_train, IW, B, LW, TF, TYPE);
t_sim2 = elmpredict(p_test , IW, B, LW, TF, TYPE);
结果展示
最后进行画图,一共9张图,可完全满足您的需求!这边挑选其中的几张图~
%% 训练集绘图
figure
plot(1:M,T_train,'r-*',1:M,T_sim1,'b-o','LineWidth',1.5)
legend('真实值','CNN-ELM预测值')
xlabel('预测样本')
ylabel('预测结果')
string={'训练集预测结果对比';['(R^2 =' num2str(R1) ' RMSE= ' num2str(error1) ' MSE= ' num2str(mse1) ' RPD= ' num2str(RPD1) ')' ]};
title(string)
set(gcf,'color','w')
%% 预测集绘图
figure
plot(1:N,T_test,'r-*',1:N,T_sim2,'b-o','LineWidth',1.5)
legend('真实值','CNN-ELM预测值')
xlabel('预测样本')
ylabel('预测结果')
string={'测试集预测结果对比';['(R^2 =' num2str(R2) ' RMSE= ' num2str(error2) ' MSE= ' num2str(mse2) ' RPD= ' num2str(RPD2) ')']};
title(string)
set(gcf,'color','w')
完整代码:
点击下方小卡片,后台回复关键字,不区分大小写:
CNNELM
其他更多需求或想要的代码均可点击下方小卡片后后台私信,看到后会秒回~