%% 清空环境变量
warning off % 关闭报警信息
close all % 关闭开启的图窗
clear % 清空变量
clc % 清空命令行
%% 读取数据
res = xlsread('data.xlsx');
%% 分析数据
num_class = length(unique(res(:, end))); % 类别数(Excel最后一列放类别)
num_dim = size(res, 2) - 1; % 特征维度
num_res = size(res, 1); % 样本数(每一行,是一个样本)
num_size = 0.8; % 训练集占数据集的比例
res = res(randperm(num_res), :); % 打乱数据集(不打乱数据时,注释该行)
flag_conusion = 1; % 标志位为1,打开混淆矩阵(要求2018版本及以上)
%% 设置变量存储数据
P_train = []; P_test = [];
T_train = []; T_test = [];
%% 划分数据集
for i = 1 : num_class
mid_res = res((res(:, end) == i), :); % 循环取出不同类别的样本
mid_size = size(mid_res, 1); % 得到不同类别样本个数
mid_tiran = round(num_size * mid_size); % 得到该类别的训练样本个数
P_train = [P_train; mid_res(1: mid_tiran, 1: end - 1)]; % 训练集输入
T_train = [T_train; mid_res(1: mid_tiran, end)]; % 训练集输出
P_test = [P_test; mid_res(mid_tiran + 1: end, 1: end - 1)]; % 测试集输入
T_test = [T_test; mid_res(mid_tiran + 1: end, end)]; % 测试集输出
end
%% 数据转置
P_train = P_train'; P_test = P_test';
T_train = T_train'; T_test = T_test';
%% 得到训练集和测试样本个数
M = size(P_train, 2);
N = size(P_test , 2);
%% 数据归一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input);
t_train = categorical(T_train)';
t_test = categorical(T_test )';
%% 创建元胞或向量,长度为训练集大小;
Lp_train = cell(size(p_train,2),1);
for i=1:size(p_train,2)
Lp_train{i,1} = p_train(:,i);
end
% 创建元胞或向量,长度为测试集大小;
for i=1:size(p_test,2)
Lp_test{i,1} = p_test(:,i);
end
%% 优化算法参数设置
% 参数取值上界(学习率,隐藏层节点,正则化系数)
% 卷积核大小大小
FiltZise = 10;
fitness = @fical;
%% 贝叶斯优化参数范围
optimVars = [
optimizableVariable('NumOfUnits', [50, 100], 'Type', 'integer')
optimizableVariable('InitialLearnRate', [1e-3, 1], 'Transform', 'log')
optimizableVariable('L2Regularization', [1e-10, 1e-2], 'Transform', 'log')];
%% 贝叶斯优化网络参数
BayesObject = bayesopt(fitness, optimVars, ... % 优化函数,和参数范围
'MaxTime', Inf, ... % 优化时间(不限制)
'IsObjectiveDeterministic', false, ...
'MaxObjectiveEvaluations', 10, ... % 最大迭代次数
'Verbose', 1, ... % 显示优化过程
'UseParallel', false);
%% 得到最优参数
NumOfUnits = BayesObject.XAtMinEstimatedObjective.NumOfUnits; % 最佳隐藏层节点数
InitialLearnRate = BayesObject.XAtMinEstimatedObjective.InitialLearnRate; % 最佳初始学习率
L2Regularization = BayesObject.XAtMinEstimatedObjective.L2Regularization; % 最佳L2正则化系数
%% 创建混合CNN-GRU网络架构
% 创建"CNN-GRU"模型
layers = [...
% 输入特征
sequenceInputLayer([num_dim 1 1],'Name','input')
sequenceFoldingLayer('Name','fold')
% CNN特征提取
convolution2dLayer([FiltZise 1],32,'Padding','same','WeightsInitializer','he','Name','conv','DilationFactor',1);
batchNormalizationLayer('Name','bn')
eluLayer('Name','elu')
averagePooling2dLayer(1,'Stride',FiltZise,'Name','pool1')
% 展开层
sequenceUnfoldingLayer('Name','unfold')
% 平滑层
flattenLayer('Name','flatten')
% GRU特征学习
gruLayer(NumOfUnits,'Name','gru1','RecurrentWeightsInitializer','He','InputWeightsInitializer','He')
% GRU输出
gruLayer(32,'OutputMode',"last",'Name','bil4','RecurrentWeightsInitializer','He','InputWeightsInitializer','He')
dropoutLayer(0.25,'Name','drop1')
% 全连接层
fullyConnectedLayer(num_class,'Name','fc')
softmaxLayer('Name','sf')
classificationLayer('Name','cf')];
layers = layerGraph(layers);
layers = connectLayers(layers,'fold/miniBatchSize','unfold/miniBatchSize');
%% CNNGRU训练选项
% 批处理样本
MiniBatchSize =128;
% 最大迭代次数
MaxEpochs = 500;
options = trainingOptions( 'adam', ...
'MaxEpochs',500, ...
'GradientThreshold',1, ...
'InitialLearnRate',InitialLearnRate, ...
'LearnRateSchedule','piecewise', ...
'LearnRateDropPeriod',400, ...
'LearnRateDropFactor',0.2, ...
'L2Regularization',L2Regularization,...
'Verbose',false, ...
'Plots','training-progress');
%% 训练模型
[net,traininfo] = trainNetwork(Lp_train, t_train, layers, options);
%% 模型预测
t_sim1 = predict(net, Lp_train);
t_sim2 = predict(net, Lp_test );
%% 反归一化
T_sim1 = vec2ind(t_sim1');
T_sim2 = vec2ind(t_sim2');
%% 显示网络结构
analyzeNetwork(net)
%% 性能评价
error1 = sum((T_sim1 == T_train))/M * 100 ;
error2 = sum((T_sim2 == T_test)) /N * 100 ;
%% 绘图
figure
plot(layers)
title("贝叶斯优化CNN-GRU模型结构")
figure;
yyaxis left; % 激活左边的轴
plot(traininfo.TrainingLoss,'linewidth',1);
title('贝叶斯优化CNN-GRU');
xlabel('训练次数');
ylabel('损失值'); % 给左y轴添加轴标签
yyaxis right; % 激活右边的轴
plot(traininfo.TrainingAccuracy,'linewidth',1);
ylabel('准确率'); % 给右y轴添加轴标签
figure
plot(T_train,'-+','Color',[0 0 0]./255,'linewidth',1)
hold on
plot(T_sim1,'o','Color',[255 0 255]./255,'linewidth',1)
legend('真实值','预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'训练集预测结果对比'; ['准确率=' num2str(error1) '%']};
title(string)
xlim([1, M])
grid
%--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
figure
plot(T_test,'-+','Color',[0 0 0]./255,'linewidth',2)
hold on
plot(T_sim2,'o','Color',[250 180 60]./255,'linewidth',2)
legend('真实值','预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'测试集预测结果对比'; ['准确率=' num2str(error2) '%']};
title(string)
xlim([1, N])
grid
%% 混淆矩阵
if flag_conusion == 1
figure
cm = confusionchart(T_train, T_sim1);
cm.Title = 'Confusion Matrix for Train Data';
cm.ColumnSummary = 'column-normalized';
cm.RowSummary = 'row-normalized';
figure
cm = confusionchart(T_test, T_sim2);
cm.Title = 'Confusion Matrix for Test Data';
cm.ColumnSummary = 'column-normalized';
cm.RowSummary = 'row-normalized';
end
没有合适的资源?快使用搜索试试~ 我知道了~
BO-CNN-GRU/Bayes-CNN-GRU,基于贝叶斯优化CNN-GRU多特征分类预测(MATLAB完整源码和数据)
共4个文件
m:3个
xlsx:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 1 下载量 121 浏览量
2024-04-06
21:24:56
上传
评论 1
收藏 21KB ZIP 举报
温馨提示
1.BO-CNN-GRU/Bayes-CNN-GRU,基于贝叶斯优化CNN-GRU多特征分类预测(MATLAB完整源码和数据) MATLAB完整源码和数据,纯手工制作,代码质量极高,注释清晰,excel数据,方便替换 2.数据输入15个特征,输出4个类别,MainBO_CNN_GRUNC.m是主程序,其余为函数文件,无需运行; 3.贝叶斯优化参数为:学习率,隐含层节点,正则化参数; 4.可视化展示分类准确率; 5.运行环境matlab2020b及以上。 1.BO-CNN-GRU/Bayes-CNN-GRU,基于贝叶斯优化CNN-GRU多特征分类预测(MATLAB完整源码和数据) MATLAB完整源码和数据,纯手工制作,代码质量极高,注释清晰,excel数据,方便替换 2.数据输入15个特征,输出4个类别,MainBO_CNN_GRUNC.m是主程序,其余为函数文件,无需运行; 3.贝叶斯优化参数为:学习率,隐含层节点,正则化参数; 4.可视化展示分类准确率; 5.运行环境matlab2020b及以上。
资源推荐
资源详情
资源评论
收起资源包目录
BO-CNN-GRU分类.zip (4个子文件)
MainBO_CNN_GRUNC.m 7KB
fical.m 2KB
initialization.m 427B
data.xlsx 19KB
共 4 条
- 1
资源评论
- A7248501252024-05-13资源很实用,对我启发很大,有很好的参考价值,内容详细。
前程算法屋
- 粉丝: 5109
- 资源: 770
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- AutoOS: Make Your OS More Powerful by Exploiting Large Language
- 智能优化特征选择-基于FPA花朵授粉优化的特征选择分类算法KNN分类器(matlab程序)
- 移动方块小游戏-Python
- 智能优化特征选择-基于FOA果蝇优化的特征选择分类算法(matlab程序)
- 智能优化特征选择-基于MFO飞蛾扑火优化的特征选择分类算法(matlab程序)
- QT MySQL编译工程目录
- 智能优化特征选择-基于MBO帝王蝴蝶优化的特征选择分类算法(matlab程序)
- 智能优化特征选择-基于DE差分进化优化的特征选择分类算法(matlab程序)
- 基于Python实现stm32 ISP串口烧录hex文件源代码.zip
- 机器学习作业-垃圾邮件过滤实现+源代码+文档说明+数据集
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功