# ECG_Depression **Repository Path**: cnyan/ECG_Depression ## Basic Information - **Project Name**: ECG_Depression - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-13 - **Last Updated**: 2025-08-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于集成学习的 ECG 信号抑郁症检测系统 ## 项目概述 本项目构建了一个基于集成学习的 ECG(心电图)信号抑郁症检测系统。系统整合了多个深度学习模型,包括基于小波变换和时域分析的不同架构,通过集成学习策略提高检测的准确性和鲁棒性。系统具有以下特点: 1. **多模型集成**: - 小波变换分支:LSTM、Transformer、Mamba、CNN等架构 - 时域分析分支:VGG、ResNet等经典架构 - 基于模型性能的自适应权重分配 - 投票机制和概率融合策略 2. **特征多样性**: - 小波变换特征:多尺度频域分析 - 时域特征:原始信号直接建模 - 多角度特征提取和融合 3. **自适应集成**: - 动态权重调整机制 - 基于验证集性能的模型选择 - 多模型预测结果融合 4. **高效实现**: - 并行模型训练和预测 - GPU 加速支持 - 分布式计算框架 ### 项目文件结构 ``` ECG_Depression_Detection/ | ├── data/ # 数据目录 │ ├── train_data/ # 训练数据(.mat ) │ ├── test_data/ # 测试数据(.mat ) │ ├── predict_data/ # 预测数据(.mat ) │ ├── raw_segments/ # 原始信号片段 │ │ ├── train_data/ # 训练集原始片段(.npy ) │ │ ├── test_data/ # 测试集原始片段(.npy ) │ │ └── predict_data/ # 预测集原始片段(.npy ) │ ├── processed/ # 预处理后的数据 │ │ ├── train_data/ # 训练数据(.npy ) │ │ ├── test_data/ # 测试数据(.npy ) │ │ └── predict_data/ # 预测数据(.npy ) │ └── Label.csv # 标签文件 | ├── src/ # 源代码目录 │ ├── __init__.py │ ├── data_loader.py # 数据加载模块 │ ├── model_wavelet.py # 小波变换分支模型定义 │ ├── model_time.py # 时域分析分支模型定义 │ ├── evaluate.py # 评估脚本 │ ├── ensemble_evaluate.py # 集成评估脚本 │ ├── utils.py # 工具函数 │ ├── predict.py # 预测脚本 │ └── train.py # 训练脚本 | ├── scripts/ # 脚本目录 │ ├── preprocess_data.py # 数据预处理脚本 │ ├── denoise.py # 信号降噪模块 │ ├── plot_data.py # 数据可视化脚本 │ ├── signal_comparison.py # 信号对比分析脚本 │ └── clean_processed_data.py # 数据清理脚本 | ├── checkpoints/ # 模型检查点目录 │ └── epoch_*.pth # 训练过程中的模型检查点 | ├── saved_models/ # 保存的模型目录 │ └── best_model.pth # 最佳模型权重 | ├── results/ # 结果目录 │ ├── evaluation/ # 评估结果 │ ├── plots/ # 可视化图表 │ └── signal_comparison/ # 信号对比结果 | ├── runs/ # TensorBoard日志目录 │ └── ecg_training/ # 训练过程日志 | ├── requirements.txt # 项目依赖 └── README.md # 项目文档 ``` ## 相关分支 本项目包含两个主要实现分支,分别基于不同的特征提取策略: ### [小波变换分支](https://github.com/LUXINGYU23/ECG_Depression/tree/feature/wavelet) - 基于小波变换的多尺度分析 - 实现了LSTM、Transformer、Mamba等深度学习架构 - 适合捕获信号的频域特征 - [详细文档](https://github.com/LUXINGYU23/ECG_Depression/tree/feature/wavelet/README.md) ### [时域分析分支](https://github.com/LUXINGYU23/ECG_Depression/tree/feature/time) - 基于原始信号的直接建模 - 实现了VGG、ResNet等经典架构的一维适配 - 专注于时域特征提取 - [详细文档](https://github.com/LUXINGYU23/ECG_Depression/tree/feature/time/README.md) 当前master分支整合了上述两个分支的最佳实践,通过集成学习框架实现了更优的性能。 ## 集成学习框架 ### 1. 模型组成 系统集成了两大类模型: 1. **小波变换分支模型** (`model_wavelet.py`): - LSTM版本:序列建模 - Transformer版本:全局注意力 - Mamba版本:状态空间模型 - CNN版本:局部特征提取 2. **时域分析分支模型** (`model_time.py`): - VGG系列:VGG13/16/19的一维适配版本 - ResNet系列:ResNet18/34的一维适配版本 - ChannelWiseCNN:专门设计的时域分析网络 ### 2. 集成策略 #### 模型评估 (`ensemble_evaluate.py`) - 独立评估每个模型性能 - 计算模型权重分配 - 生成综合评估报告 #### 集成预测 (`predict.py`) - 加载多个预训练模型 - 并行进行模型预测 - 基于准确率的加权平均 - 可调阈值 ### 3. 权重分配机制 - 基于验证集准确率分配权重 - 动态更新模型权重 - 样本级别的置信度评估 - 异常检测与处理 ### 各模型最佳独立性能比较 | 模型 | 准确率 | ROC-AUC | F1分数 | |-----|--------|---------|--------| | WaveletLSTM | 0.85 | 0.8080 | 0.84 | | WaveletTransformer | 0.86 | 0.8059 | 0.85 | | WaveletMamba | 0.77 | 0.7770 | 0.77 | | WaveletCNN | 0.71 | 0.5679 | 0.63 | | TimeCNN | 0.83 | 0.7675 | 0.82 | ### 最佳集成模型性能 | 模型 | 准确率 | ROC-AUC | F1分数 | |-----|--------|---------|--------| | WaveletLSTM+WaveletTransformer+TimeCNN | 0.88 | 0.8210 | 0.87 | ## 环境依赖 - Python 3.8 或更高版本 - PyTorch >= 1.10.0 - CUDA >= 11.3 (如果使用GPU) - NumPy >= 1.19.2 - SciPy >= 1.7.1 - scikit-learn >= 0.24.2 - pandas >= 1.3.3 - Matplotlib >= 3.4.3 - PyWavelets >= 1.2.0 - TensorBoard >= 2.7.0 - imbalanced-learn >= 0.8.1 - seaborn >= 0.11.2 - py-ecg-detectors >= 1.0.2 - pykalman >= 0.9.5 ## 安装依赖 在项目根目录下,运行以下命令安装所需的依赖库: ```bash pip install -r requirements.txt ``` 如果需要使用Mamba模型,请额外安装以下依赖: ```bash pip install mamba-ssm ``` 对于 CUDA 支持,请根据您的 GPU 和 CUDA 版本安装对应的 PyTorch 版本: ```bash # CUDA 11.3 pip install torch==1.10.1+cu113 -f https://download.pytorch.org/whl/cu113/torch_stable.html # CUDA 11.6 pip install torch==1.10.1+cu116 -f https://download.pytorch.org/whl/cu116/torch_stable.html ``` `requirements.txt` 文件内容: ``` torch numpy scipy scikit-learn matplotlib pandas seaborn imbalanced-learn PyWavelets TensorFlow py-ecg-detectors ``` ## 数据准备 ### 1. 原始数据 将您的原始数据(.mat 文件)放置在以下目录中: - 训练数据:`data/train_data/` - 测试数据:`data/test_data/` - 预测数据:`data/predict_data/` 标签文件 `Label.csv` 应放在 `data/` 目录下,格式如下: ``` ID,Label 001,0 002,0 003,0 ... ``` - `ID`:样本编号,与文件名中的编号对应(例如,001-1.mat 和 001-2.mat 对应 ID 为 001)。 - `Label`:标签,0 表示正常,1 表示抑郁。 ### 2. 数据预处理 运行数据预处理脚本,将原始数据转换为模型可用的格式。预处理包括以下步骤: 1. 信号降噪与滤波 - 使用 Butterworth 带通滤波器 (0.5-40Hz) - 使用高通滤波器去除基线漂移 - 应用自适应卡尔曼滤波器组去除噪声 2. 信号分量处理 - 分离高频(QRS复合波)和低频分量 - 独立处理各分量的噪声 - 自适应参数估计与信号重构 3. 信号归一化 - 去除直流分量 - 幅值归一化到 [-1, 1] 范围 - 使用分位数法处理异常值 4. 数据分割与保存 - 将信号切割为 5 秒片段(2560 个采样点,采样率 512Hz) - 使用滑动窗口进行分割(步长 1 秒) - 保存为 NPY 格式,包含以下信息: - ECG 信号数据 - 标签(0:正常,1:抑郁) - 样本 ID 和片段索引 #### 运行预处理脚本 在项目根目录下,运行: ```bash python scripts/preprocess_data.py ``` 该脚本将: 1. 读取配置 - 从 `data/train_data/`、`data/test_data/` 和 `data/predict_data/` 加载 .mat 文件 - 解析 `Label.csv` 文件获取标签信息 - 验证数据完整性和标签对应关系 2. 执行预处理 - 使用多进程并行处理文件 - 对每个信号片段应用完整的预处理流程 - 实时显示处理进度和状态信息 3. 保存处理结果 - 训练数据:`data/processed/train_data/` - 测试数据:`data/processed/test_data/` - 预测数据:`data/processed/predict_data/` - 保存原始信号片段用于对比:`data/raw_segments/` 4. 生成处理报告 - 记录处理参数和统计信息 - 保存样本分布统计 #### 命令行参数 ```bash python scripts/preprocess_data.py ``` ## 数据可视化 ### 1. 信号可视化与对比 在项目根目录下运行以下命令可视化和对比原始信号与处理后的信号: ```bash python scripts/signal_comparison.py ``` 该脚本将: - 对比原始信号和预处理后的信号 - 生成信号处理前后的对比图 - 保存对比结果到 `results/signal_comparison/` 目录 ### 2. 样本波形可视化 查看样本的详细波形: **参数说明**: - `--data_dir`:输入数据目录 - `--output_dir`:输出图表目录,默认为 `results/plots`。 - `--samples`:要绘制的样本数量,默认为 5 。 - `--label`:要绘制的标签,默认为全部 示例: ```bash python scripts/plot_data.py --data_dir data/processed/train_data --save_dir results/plots --samples 5 --label 1 ``` ### 3. TensorBoard 可视化 训练过程的可视化监控: ```bash tensorboard --logdir runs/ecg_training ``` 可查看的指标包括: - 训练损失和验证损失 - 准确率、精确率、召回率变化 - AUC-ROC 曲线 ## 模型训练 ### 1. 配置训练参数 在 `src/train.py` 中提供了以下可配置参数: ```bash python src/train.py ``` 主要参数说明: - `batch_size`:批量大小,默认 64 - `num_epochs`:训练轮数,默认 150 - `learning_rate`:初始学习率,默认 0.001 - `weight_decay`:权重衰减,默认 0.001 - `sampling_strategy`:采样策略,可选 'weighted'/'under'/'none' ### 2. 训练特性 - **学习率调度**:使用 CosineAnnealingWarmRestarts - **早停机制**:基于验证集 AUC-ROC 评分 - **类别平衡**:支持加权采样和欠采样 - **梯度裁剪**:防止梯度爆炸 - **混合精度训练**:支持 FP16 训练加速 ### 3. 训练监控 使用 TensorBoard 监控训练过程: ```bash tensorboard --logdir runs/ecg_training ``` 可视化指标包括: - 训练/验证损失 - 分类指标(准确率、精确率、召回率、F1) - AUC-ROC 曲线 - 学习率变化 - 模型梯度分布 ## 集成评估 ### 1. 评估脚本 ```bash python src/ensemble_evaluate.py ``` 参数说明: - `--data_dir`:测试数据目录 - `--models_base_path`:所有模型权重目录 - `--batch_size`:评估批量大小 - `--threshold`:分类阈值,默认 0.55 ### 2. 评估流程 1. **模型加载**: - 加载所有预训练模型 - 小波变换分支模型(LSTM、Transformer等) - 时域分析分支模型(VGG、ResNet等) 2. **独立评估**: - 分别评估每个模型性能 - 计算各模型准确率、AUC等指标 - 生成独立评估报告 3. **集成评估**: - 基于准确率分配模型权重 - 加权融合多模型预测结果 - 生成集成评估报告 ### 3. 结果保存 评估结果将保存在带时间戳的目录中: ``` results/ensemble_evaluation/YYYYMMDD_HHMMSS/ ├── model1/ # 独立模型评估结果 │ ├── evaluation_report.txt │ └── predictions.csv ├── model2/ │ ├── evaluation_report.txt │ └── predictions.csv └── ensemble_report.txt # 集成评估报告 ``` ## 模型预测 ### 1. 预测脚本 ```bash python src/predict.py ``` 参数说明: - `--data_dir`:预测数据目录 - `--models_base_path`:所有模型权重目录 - `--batch_size`:预测批量大小 - `--output_path`:预测结果保存路径 ### 2. 预测流程 1. **模型准备**: - 加载所有预训练模型 - 读取模型权重配置 - 初始化预测环境 2. **并行预测**: - 多模型并行预测 - 独立生成预测概率 - 记录各模型预测结果 3. **结果融合**: - 基于准确率的加权平均 - 动态调整预测阈值 - 生成最终预测标签 ### 3. 输出格式 预测结果将包含多个文件: 1. 独立模型预测结果: ```csv file_id,prediction,probability 001,1,0.872 002,1,0.891 003,0,0.234 ... ``` 2. 集成预测结果: ```csv file_id,prediction,probability 001,1,0.872 002,1,0.891 003,0,0.234 ... ``` - `prediction`:最终预测标签 - `probability`:加权平均概率