Skip to content

Repository files navigation

Draw4Nature - 肿瘤诊断项目

目标: 使用多标签分类预测32种肿瘤类型的诊断


📋 项目概况

  • 数据来源: 单中心 (wyfy)
  • 患者数: 415,328 人
  • 记录数: 3.6M 条
  • 肿瘤类型: 32 种
  • 模型: LightGBM (AUROC 0.87), BEHRT, Med-BERT
  • 评估指标: AUROC with 95% CI (bootstrap)

🗂️ 项目结构

draw4nature/
├── data/raw/                    # 原始数据 (all_patient_data.parquet)
├── training/                    # 训练脚本
│   ├── train_lightgbm.py
│   ├── train_behrt.py
│   ├── train_medbert.py
│   └── outputs/                 # 模型结果 (JSON + .pt)
├── plotting/                    # 绘图脚本
│   ├── figure2_cohort.py        ✅ 队列组成
│   ├── figure3a_diagnostic.py   ✅ AUROC对比
│   ├── figS7_per_disease_roc.py     ROC曲线
│   ├── figS8_per_disease_pr.py      PR曲线
│   └── figS14_prediction_distribution.py  概率分布
├── output/figures/              # 输出图表 (PDF + PNG)
├── column_names.txt             # 442个特征列
├── figures-only.pdf             # 参考文献
└── README.md

🚀 快速开始

1. 训练模型

cd training
python train_lightgbm.py    # 推荐:最快,性能最好
python train_behrt.py
python train_medbert.py

特性:

  • ✅ Polars 加载 (3-7x faster than Pandas)
  • ✅ 8个进度条 (不会显得卡死)
  • ✅ 自动保存到 training/outputs/

2. 绘制图表

cd plotting
python figure2_cohort.py              # Figure 2: 队列组成
python figure3a_diagnostic.py         # Figure 3a: AUROC对比
python figS7_per_disease_roc.py       # S7: ROC曲线
python figS8_per_disease_pr.py        # S8: PR曲线
python figS14_prediction_distribution.py  # S14: 概率分布

输出: output/figures/ (PDF + PNG 格式)


📊 数据结构

442个特征列

类型 数量 示例
实验室检查 122 lab_float_ALT, lab_float_Tumor_AFP
体征 51 sign_SystolicBP, sign_Temperature
诊断 258 diag_Malignant_neoplasm_of_liver
TNM分期 11 TNM_T, TNM_N, TNM_M

完整列表: 见 column_names.txt

32种肿瘤类型

  • 肝癌、肺癌、结直肠癌、胃癌、乳腺癌...
  • 所有列名以 diag_Malignant_neoplasm_of_ 开头

📈 模型性能

LightGBM (最佳)

  • 平均AUROC: 0.8658 (0.8642-0.8674, 95% CI)
  • 训练时间: ~5分钟
  • 推荐理由: 快速、高性能、可解释

BEHRT & Med-BERT

  • 用于对比实验
  • 需要序列化输入

📊 可绘制的图表

✅ 已完成

  1. Figure 2: 队列组成 (患者数、记录数、分布)
  2. Figure 3a: 诊断AUROC对比 (3个模型)

🔜 可创建

  1. Figure S7: 每个癌症的ROC曲线 (32个子图)
  2. Figure S8: 每个癌症的PR曲线
  3. Figure S14: 预测概率分布

💡 潜在图表

  • 亚组分析 (年龄/性别)
  • 肿瘤标志物分析 (AFP→肝癌, CEA→结直肠癌)
  • 时序分析 (诊断前后实验室值变化)

❌ 无法绘制

  • 深度学习内部分析 (UMAP, attention)
  • 治疗响应 (无治疗数据)
  • 生存分析 (无随访数据)
  • 多中心对比 (单中心数据)

详细分析: 见 docs/COMPLETE_FIGURE_ANALYSIS.md


⚠️ 重要约束

TNM分期注意事项

  • 不能跨癌种分析: 肺癌T3 ≠ 肝癌T3
  • 单癌种可用: 仅针对特定癌症分析TNM分布
  • 📌 任务差异: PDF用TNM做预后,我们做诊断

项目优势

  • ✅ 32种癌症覆盖广
  • ✅ 样本量大 (41万+)
  • ✅ AUROC 0.87 表现优秀
  • ✅ 传统ML方法可解释

🔧 环境要求

pip install polars pandas numpy scikit-learn matplotlib seaborn tqdm

可选 (用于深度学习模型):

pip install torch transformers

📝 Git工作流

# 训练完成后
git add training/outputs/
git commit -m "Add model results"
git push

# 生成图表后
git add output/figures/
git commit -m "Add figures S7, S8, S14"
git push

注意: .gitignore 已配置,不会提交 *.pt 模型文件


📚 参考文档

  • 完整分析: docs/COMPLETE_FIGURE_ANALYSIS.md
  • 列名说明: column_names.txt
  • 参考文献: figures-only.pdf

📄 许可

仅供科研使用,数据不得外传。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages