Rahik-516/xai-medical-diagnosis-dashboard
GitHub: Rahik-516/xai-medical-diagnosis-dashboard
基于Streamlit构建的可解释AI医疗诊断仪表板,为糖尿病、心脏病和肺炎三种疾病提供带有SHAP、LIME、Grad-CAM多层次解释可视化的预测辅助,帮助临床人员理解模型判断依据。
Stars: 0 | Forks: 0
# 医疗诊断中黑盒模型的可解释 AI
基于研究的 Streamlit MVP 仪表板,用于辅助临床医生在糖尿病风险、心脏病风险以及胸部 X 光片肺炎模式检测方面进行决策支持。
## 安全免责声明
此预测仅供参考,必须由具备资质的临床医生进行审核。
本系统并非自主诊断工具。
## 概述
本应用程序复用了已训练的研究成果,并提供带有可解释性展示的推理时输出:
- 糖尿病预测:使用已保存的 Stacking 模型 + 已保存的 Imputer/Scaler。
- 心脏病预测:使用已保存的 sklearn Pipeline。
- 肺炎图像预测:使用已保存的 DenseNet121 Keras 模型。
- 基于规则的自然语言摘要(确定性,未使用 LLM)。
- 静态 SHAP/LIME/Grad-CAM 笔记本输出作为备选的视觉证据。
## 支持的任务
1. 基于表格输入的糖尿病风险预测。
2. 基于表格输入的心脏病风险预测。
3. 基于胸部 X 光片上传的肺炎检测。
4. 每个模块的可解释性渲染。
## 研究背景
本仪表板基于在 Kaggle notebook 中实现的完整实验研究 Pipeline。该 Notebook 包含模型训练代码、特征工程步骤以及可解释性实验(SHAP、LIME、Grad-CAM),同时附带了 XAI 质量指标和可视化示例。
Kaggle Notebook(权威参考):
https://www.kaggle.com/code/ismrahik/xai-medical-diagnosis-final
## 功能特性
- 基于 Streamlit 的 Web 仪表板,用于交互式推理和可解释性展示
- 多疾病支持:糖尿病、心脏病、肺炎
- 针对图像/表格预测的基于规则的自然语言临床摘要
- 针对表格模型的 SHAP 解释(当运行环境支持 SHAP 时)
- 针对选定样本的 LIME 局部解释
- 针对胸部 X 光图像的 Grad-CAM 可视化(动态 + 静态备选方案)
- 基于置信度的解释区间和决策阈值
- 静态和动态的 XAI 图表库,确保可重复性
## 项目截图:
主页:
糖尿病预测:
心脏病预测:
肺炎检测:
关于 / 方法论:
## 技术栈
- Python
- Streamlit
- TensorFlow / Keras
- Scikit‑learn, XGBoost, LightGBM
- SHAP, LIME
- NumPy, OpenCV, Pillow, Matplotlib
## 项目结构
```
project_root/
|-- app.py
|-- requirements.txt
|-- README.md
|-- NOTES_FOR_COPILOT.md
|-- config/
| |-- manifest.json
| |-- thresholds.json
| |-- settings.py
| `-- paths.py
|-- notebook_reference/
| |-- xai_medical_diagnosis_FINAL.ipynb
| `-- notebook_extracted.py
|-- artifacts/
| |-- diabetes/
| | |-- models/
| | `-- preprocessors/
| |-- heart/
| | `-- models/
| `-- pneumonia/
| `-- models/
|-- static_outputs/
| |-- diabetes/
| |-- heart/
| |-- pneumonia/
| `-- dashboard/
|-- src/
| |-- components/
| |-- pages/
| |-- pipelines/
| |-- preprocessing/
| |-- features/
| |-- models/
| |-- explainability/
| |-- utils/
| `-- assets/
`-- tests/
```
## Artifact 放置说明
请严格按照以下方式放置 artifact:
### 糖尿病
- `artifacts/diabetes/models/best_Diabetes_Stack.pkl`
- `artifacts/diabetes/preprocessors/diab_knn_imp.pkl`
- `artifacts/diabetes/preprocessors/diab_scaler.pkl`
- 糖尿病静态图表存放于 `static_outputs/diabetes/`
### 心脏病
- `artifacts/heart/models/best_Heart_pipe.pkl`
- 心脏病静态图表存放于 `static_outputs/heart/`
### 肺炎
- `artifacts/pneumonia/models/best_pneumonia_densenet121.keras`
- 肺炎静态图表存放于 `static_outputs/pneumonia/`
### 全局仪表板输出
- 将仪表板图像和 CSV 文件放置在 `static_outputs/dashboard/`
所有路径均由 `config/manifest.json` 集中管理。
## 安装设置
1. 创建并激活 Python 环境。
2. 安装依赖项:
```
pip install -r requirements.txt
```
3. 将 artifact 复制到上述列出的文件夹中。
## 运行
```
streamlit run app.py
```
## 测试
```
pytest -q
```
## 局限性
- 此 MVP 依赖于外部 artifact 文件,且不会重新训练模型。
- 本地表格解释是基于规则的摘要,而非完全实时的 SHAP 重新计算。
- Grad-CAM 在某些 runtime 下可能会失败;在这种情况下将显示静态备用图像。
## 未来工作
1. 增加经认证的临床医生工作区和审计日志。
2. 增加更丰富的不确定性校准视图。
3. 增加 artifact schema 检查和模型版本注册表。
4. 扩展针对 UI 和 artifact 契约的自动化测试。
糖尿病预测:
心脏病预测:
肺炎检测:
关于 / 方法论:
## 技术栈
- Python
- Streamlit
- TensorFlow / Keras
- Scikit‑learn, XGBoost, LightGBM
- SHAP, LIME
- NumPy, OpenCV, Pillow, Matplotlib
## 项目结构
```
project_root/
|-- app.py
|-- requirements.txt
|-- README.md
|-- NOTES_FOR_COPILOT.md
|-- config/
| |-- manifest.json
| |-- thresholds.json
| |-- settings.py
| `-- paths.py
|-- notebook_reference/
| |-- xai_medical_diagnosis_FINAL.ipynb
| `-- notebook_extracted.py
|-- artifacts/
| |-- diabetes/
| | |-- models/
| | `-- preprocessors/
| |-- heart/
| | `-- models/
| `-- pneumonia/
| `-- models/
|-- static_outputs/
| |-- diabetes/
| |-- heart/
| |-- pneumonia/
| `-- dashboard/
|-- src/
| |-- components/
| |-- pages/
| |-- pipelines/
| |-- preprocessing/
| |-- features/
| |-- models/
| |-- explainability/
| |-- utils/
| `-- assets/
`-- tests/
```
## Artifact 放置说明
请严格按照以下方式放置 artifact:
### 糖尿病
- `artifacts/diabetes/models/best_Diabetes_Stack.pkl`
- `artifacts/diabetes/preprocessors/diab_knn_imp.pkl`
- `artifacts/diabetes/preprocessors/diab_scaler.pkl`
- 糖尿病静态图表存放于 `static_outputs/diabetes/`
### 心脏病
- `artifacts/heart/models/best_Heart_pipe.pkl`
- 心脏病静态图表存放于 `static_outputs/heart/`
### 肺炎
- `artifacts/pneumonia/models/best_pneumonia_densenet121.keras`
- 肺炎静态图表存放于 `static_outputs/pneumonia/`
### 全局仪表板输出
- 将仪表板图像和 CSV 文件放置在 `static_outputs/dashboard/`
所有路径均由 `config/manifest.json` 集中管理。
## 安装设置
1. 创建并激活 Python 环境。
2. 安装依赖项:
```
pip install -r requirements.txt
```
3. 将 artifact 复制到上述列出的文件夹中。
## 运行
```
streamlit run app.py
```
## 测试
```
pytest -q
```
## 局限性
- 此 MVP 依赖于外部 artifact 文件,且不会重新训练模型。
- 本地表格解释是基于规则的摘要,而非完全实时的 SHAP 重新计算。
- Grad-CAM 在某些 runtime 下可能会失败;在这种情况下将显示静态备用图像。
## 未来工作
1. 增加经认证的临床医生工作区和审计日志。
2. 增加更丰富的不确定性校准视图。
3. 增加 artifact schema 检查和模型版本注册表。
4. 扩展针对 UI 和 artifact 契约的自动化测试。标签:Apex, DenseNet121, Grad-CAM, Kaggle, Keras, Kubernetes, LIME, Python, scikit-learn, SHAP, sklearn, Streamlit, TensorFlow, XAI, X光片, 临床决策支持系统, 云计算, 仪表盘, 医疗影像, 医疗诊断, 可解释人工智能, 图像识别, 堆叠模型, 心脏病预测, 数据管道, 无后门, 机器学习, 深度学习, 特征工程, 糖尿病预测, 肺炎检测, 自然语言生成, 表格数据处理, 规则引擎, 计算机辅助诊断, 访问控制, 软件工程, 逆向工具