Matlab使用CNN(卷积神经网络)对一维信号(如语音信号、心电图信号)进行二分类源程序。也可以改成多分类。
会提供原始数据,注释详细
工作如下:
1、加载数据,一共为200个正常样本和200个异常样本,训练集为80%,即160正常和160异常,一共320条数据;测试集为40正常和40异常,一共80条数据。
2、构建一维CNN架构,层数为两层。
3、构建options。
4、训练。
5、测试,并绘制混淆矩阵。
注:需要Matlab 2020以上版本。考虑到使用Matlab对一维信号进行CNN分类的教程较少,此程序是为了方便学习怎么搭建网络、测试等等,使用的数据量较少,并且数据本身也易于分类。可有偿帮忙替换数据,换成自己的数据时可能需要根据实际情况调整网络。
项目介绍:使用Matlab和CNN对一维信号进行二分类
项目名称
1D CNN for One-Dimensional Signal Classification in Matlab
项目概述
本项目旨在使用Matlab中的卷积神经网络(CNN)对一维信号(如语音信号、心电图信号等)进行二分类。项目提供了详细的注释和示例数据,适合初学者学习如何在Matlab中搭建和训练一维CNN,并进行分类任务。项目包含从数据加载、模型构建、训练到测试的完整流程,并且可以轻松扩展为多分类任务。
项目特点
- 详细注释:代码中包含详细的注释,方便理解和修改。
- 易于上手:适合初学者快速入门一维CNN的构建和训练。
- 可扩展性:可以轻松扩展为多分类任务。
- 数据集划分:随机划分训练集和测试集,确保模型的泛化能力。
- 性能评估:计算准确率并绘制混淆矩阵,直观展示分类效果。
- 有偿服务:提供有偿的数据替换服务,根据实际情况调整网络结构。
项目结构
1D_CNN_Signal_Classification/
├── main.m # 主程序
├── data/ # 数据文件夹
│ ├── normal_signals.mat # 正常信号数据
│ └── abnormal_signals.mat # 异常信号数据
├── utils/ # 工具函数
│ ├── plot_confusion_matrix.m # 绘制混淆矩阵
└── README.md # 项目说明文档
数据格式
- 原始数据:正常和异常信号分别保存在两个MAT文件中,每个文件包含200条一维信号,每条信号长度为500。
- 类别信息:正常信号标记为0,异常信号标记为1。
项目工作流程
- 加载数据:从MAT文件中读取正常和异常信号数据。
- 构建数据集:将数据转换为适合Matlab的数据集,并随机划分训练集(80%)和测试集(20%)。
- 构建一维CNN架构:定义两层的一维CNN模型。
- 构建options:设置训练参数。
- 训练:使用训练集数据训练CNN模型。
- 测试:使用测试集数据测试CNN模型,计算准确率并绘制混淆矩阵。
代码示例
1. 主程序 main.m
% 主程序 main.m
% 使用1D CNN对一维信号进行二分类
% 需要Matlab 2020及以上版本
% 1. 加载数据
load('data/normal_signals.mat');
load('data/abnormal_signals.mat');
% 将数据合并
X = [normal_signals; abnormal_signals];
y = [zeros(size(normal_signals, 1), 1); ones(size(abnormal_signals, 1), 1)];
% 2. 构建数据集
% 随机划分训练集和测试集
cv = cvpartition(y, 'HoldOut', 0.2);
idx = cv.test;
X_train = X(~idx, :);
y_train = y(~idx, :);
X_test = X(idx, :);
y_test = y(idx, :);
% 转换为适合Matlab的数据格式
X_train = num2cell(X_train, 2);
X_test = num2cell(X_test, 2);
% 3. 构建一维CNN架构
layers = [
sequenceInputLayer(1)
convolution1dLayer(10, 32, 'Padding', 'same')
batchNormalizationLayer
reluLayer
maxPooling1dLayer(2, 'Stride', 2)
convolution1dLayer(10, 64, 'Padding', 'same')
batchNormalizationLayer
reluLayer
maxPooling1dLayer(2, 'Stride', 2)
flattenLayer
fullyConnectedLayer(2) % 二分类
softmaxLayer
classificationLayer
];
% 4. 构建options
options = trainingOptions('adam', ...
'MaxEpochs', 10, ...
'MiniBatchSize', 32, ...
'Plots', 'training-progress', ...
'Verbose', false, ...
'Shuffle', 'every-epoch');
% 5. 训练
net = trainNetwork(X_train, categorical(y_train), layers, options);
% 6. 测试
Y_pred = classify(net, X_test);
Y_pred = double(Y_pred) - 1; % 将分类结果转换为0或1
% 计算准确率
accuracy = sum(Y_pred == y_test) / numel(y_test);
fprintf('Accuracy: %.2f%%\n', accuracy * 100);
% 绘制混淆矩阵
plot_confusion_matrix(y_test, Y_pred);
2. 工具函数 utils/plot_confusion_matrix.m
% 工具函数 plot_confusion_matrix.m
% 绘制混淆矩阵
function plot_confusion_matrix(true_labels, predicted_labels)
% 计算混淆矩阵
cm = confusionmat(true_labels, predicted_labels);
% 绘制混淆矩阵
figure;
imagesc(cm);
colorbar;
title('Confusion Matrix');
xlabel('Predicted Label');
ylabel('True Label');
set(gca, 'XTick', [1 2], 'XTickLabel', {'Normal', 'Abnormal'});
set(gca, 'YTick', [1 2], 'YTickLabel', {'Normal', 'Abnormal'});
caxis([0, max(max(cm))]);
end
使用说明
-
准备数据:
- 确保你的正常和异常信号数据分别保存在
data/normal_signals.mat
和data/abnormal_signals.mat
中,每条信号长度为500。 - 如果需要替换数据,请联系作者进行有偿数据替换服务。
- 确保你的正常和异常信号数据分别保存在
-
运行主程序:
- 在Matlab环境中运行
main.m
脚本。 - 查看控制台输出的准确率和生成的混淆矩阵。
- 在Matlab环境中运行
注意事项
- Matlab版本:该项目需要Matlab 2020及以上版本。
- 数据格式:确保你的信号数据格式正确,且每条信号长度一致。
- 超参数调整:根据实际情况调整网络层数、卷积核大小、学习率等超参数。
- 性能评估:除了准确率和混淆矩阵,还可以添加其他评估指标,如精确率、召回率和F1分数。
通过上述步骤,你可以轻松地使用Matlab和一维CNN对一维信号进行二分类,并获得详细的评估结果。希望这个项目能帮助你更好地理解和应用深度学习技术。