CNN-GRU-Attention基于卷积神经网络-门控循环 单元-空间注意力机制CNN-GRU-SAM-Attention多特征分类预测。 多特征输入单输出的二分类及多分类模型。 程序内注释详细,直接替换数据就可以用。 程序语言为matlab,程序可出分类效果图,迭代优化图,混淆矩阵图。 多边形面积PAM,分类准确率,灵敏度,特异性,曲线下面积AUC,Kappa系数,F_measure。

在机器学习和深度学习领域,多特征分类预测是一个重要的任务。今天咱们就来聊聊基于 CNN - GRU - Attention(卷积神经网络 - 门控循环单元 - 空间注意力机制)的多特征分类预测,这里还涉及到 CNN - GRU - SAM - Attention,其实 SAM 也是空间注意力机制(Spatial Attention Mechanism)的一种表述啦。我们要构建多特征输入单输出的二分类及多分类模型,并且用 Matlab 实现,代码注释详细,方便大家直接替换数据就能用,还能输出分类效果图、迭代优化图和混淆矩阵图呢,最后再用一系列指标来评估模型。

数据准备

首先得准备好数据,假设我们的数据存储在一个 Matlab 的表格文件(.mat)中,数据格式大概像这样:

% 加载数据
load('your_data_file.mat'); 
% 假设数据表格名为 'dataTable'
dataTable = your_dataTable; 

% 提取特征
features = table2array(dataTable(:,1:end - 1));
% 提取标签
labels = table2array(dataTable(:,end));

这里从表格文件中提取了特征和标签,特征就是前面所有列,标签是最后一列。

构建 CNN - GRU - Attention 模型

CNN 层

卷积神经网络(CNN)擅长处理图像等具有空间结构的数据,它能自动提取数据中的局部特征。

layers = [imageInputLayer([height width channels])
    convolution2dLayer(3,16,'Padding','same')
    reluLayer()
    maxPooling2dLayer(2,'Stride',2)];

这里定义了一个简单的 CNN 模块,imageInputLayer 定义了输入图像的尺寸(heightwidthchannels),convolution2dLayer 使用 3x3 的卷积核,生成 16 个特征图,并且使用 'same' 填充保证输出尺寸和输入一样,reluLayer 引入非线性,maxPooling2dLayer 进行下采样,步长为 2。

GRU 层

门控循环单元(GRU)能够处理序列数据中的长期依赖问题。

% 将 CNN 输出转换为序列格式
layers = [layers fullyConnectedLayer(numHiddenUnits)
    gruLayer(numHiddenUnits)
    reluLayer()];

这里先通过全连接层将 CNN 的输出转换为适合 GRU 输入的格式,numHiddenUnits 是隐藏单元的数量,gruLayer 构建 GRU 层,再用 reluLayer 增加非线性。

Attention 层

空间注意力机制(Attention)可以让模型更加关注数据中重要的部分。

% 注意力机制实现简化示意
attentionWeights = softmax(fullyConnectedLayer(1)(layers(end - 1).Output));
weightedFeatures = bsxfun(@times, layers(end - 1).Output, attentionWeights);
layers = [layers fullyConnectedLayer(numClasses)
    softmaxLayer()
    classificationLayer()];

这里通过全连接层和 softmax 生成注意力权重,然后与前面层的输出相乘得到加权特征,最后接上全连接层、softmax 层和分类层来完成分类任务。

模型训练与评估

% 划分训练集和测试集
cvp = cvpartition(labels,'HoldOut',0.2);
idxTrain = training(cvp);
idxTest = test(cvp);

% 训练模型
options = trainingOptions('adam',...
    'MaxEpochs',50,...
    'MiniBatchSize',32,...
    'InitialLearnRate',0.001,...
    'Plots','training-progress');
net = trainNetwork(features(idxTrain,:),labels(idxTrain),layers,options);

% 预测
predictedLabels = classify(net,features(idxTest,:));

这里用 cvpartition 将数据划分为训练集和测试集,trainingOptions 设置训练参数,使用 adam 优化器,最大 epoch 为 50,小批量大小为 32 等,然后训练网络并进行预测。

评估指标计算

% 计算混淆矩阵
confMat = confusionmat(labels(idxTest),predictedLabels);
% 计算分类准确率
accuracy = sum(diag(confMat))/sum(confMat(:));
% 计算灵敏度(召回率)
sensitivity = confMat(1,1)/(confMat(1,1)+confMat(2,1));
% 计算特异性
specificity = confMat(2,2)/(confMat(2,2)+confMat(1,2));
% 计算曲线下面积 AUC
[X,Y,T,AUC] = perfcurve(labels(idxTest),scores(:,2),2);
% 计算 Kappa 系数
kappa = kappa2(confMat);
% 计算 F_measure
F_measure = 2 * (confMat(1,1)/(confMat(1,1)+confMat(2,1))) * (confMat(1,1)/(confMat(1,1)+confMat(1,2))) / ((confMat(1,1)/(confMat(1,1)+confMat(2,1))) + (confMat(1,1)/(confMat(1,1)+confMat(1,2))));

这里计算了混淆矩阵、分类准确率、灵敏度、特异性、AUC、Kappa 系数和 F_measure 这些评估指标。

绘图

分类效果图

figure;
gscatter(features(idxTest,1),features(idxTest,2),predictedLabels);
title('分类效果图');
xlabel('特征 1');
ylabel('特征 2');

这里以两个特征为例绘制分类效果图,直观展示分类情况。

迭代优化图

在训练过程中,Matlab 已经帮我们绘制了训练进度图,也就是迭代优化图,它展示了损失函数随着训练 epoch 的变化情况。

混淆矩阵图

figure;
confusionchart(confMat);
title('混淆矩阵图');

这个图可以很清晰地看到模型在不同类别上的分类情况。

CNN-GRU-Attention基于卷积神经网络-门控循环 单元-空间注意力机制CNN-GRU-SAM-Attention多特征分类预测。 多特征输入单输出的二分类及多分类模型。 程序内注释详细,直接替换数据就可以用。 程序语言为matlab,程序可出分类效果图,迭代优化图,混淆矩阵图。 多边形面积PAM,分类准确率,灵敏度,特异性,曲线下面积AUC,Kappa系数,F_measure。

通过以上步骤,我们就实现了基于 CNN - GRU - Attention 的多特征分类预测,并且用 Matlab 完成了模型训练、评估和绘图。希望大家能根据自己的数据轻松应用这个方法。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐