@浙大疏锦行
# 心脏病预测项目 - 目录说明
## 项目结构
```
heart_project/
├── data/ # 原始数据目录
│ └── heart.csv # 心脏病数据集(14特征 + target)
│
├── load_data.py # 【模块1】数据加载
├── eda.py # 【模块2】数据探索与可视化
├── preprocess.py # 【模块3】数据预处理
├── feature_engineering.py # 【模块4】特征工程
├── train.py # 【模块5】模型训练
├── evaluate.py # 【模块6】模型评估
├── predict.py # 【模块7】模型预测/推理
├── main.py # 主入口(串联完整流程)
└── output/ # 运行后自动生成,存放所有输出
├── *.png # 可视化图表
├── *.pkl # 保存的模型和预处理工具
└── *.json # 评估结果
```
## 各模块职责与可复用性分析
### 1. load_data.py — 数据加载
| 函数 | 类型 | 说明 |
|------|------|------|
| `load_csv()` | ✅ 可复用 | 通用CSV加载,任何项目都能用 |
| `split_data()` | ✅ 可复用 | 通用训练/测试集拆分,自动分层抽样 |
| `load_heart_data()` | ❌ 项目特定 | 心脏病数据专用入口 |
**复用建议**:`load_csv` 和 `split_data` 可以直接搬到任何新项目。
---
### 2. eda.py — 数据探索与可视化
| 函数 | 类型 | 说明 |
|------|------|------|
| `check_missing()` | ✅ 可复用 | 缺失值统计,返回DataFrame |
| `plot_distribution()` | ✅ 可复用 | 单变量分布直方图+箱线图 |
| `plot_correlation_heatmap()` | ✅ 可复用 | 相关性热力图 |
| `plot_target_distribution()` | ✅ 可复用 | 目标变量分布柱状图 |
| `run_heart_eda()` | ❌ 项目特定 | 心脏病完整EDA流程编排 |
**复用建议**:前4个绘图函数是通用工具,建议以后单独存成 `visualization_utils.py`,所有项目共用。
---
### 3. preprocess.py — 数据预处理
| 函数 | 类型 | 说明 |
|------|------|------|
| `fill_missing_numerical()` | ✅ 可复用 | 数值型缺失值填补 |
| `fill_missing_categorical()` | ✅ 可复用 | 类别型缺失值填补 |
| `detect_outliers_iqr()` | ✅ 可复用 | IQR法异常值检测 |
| `clip_outliers()` | ✅ 可复用 | IQR法截断异常值 |
| `standardize()` | ✅ 可复用 | 标准化(train fit, test transform) |
| `label_encode()` | ✅ 可复用 | Label编码 |
| `preprocess_heart()` | ❌ 项目特定 | 心脏病预处理流程编排 |
**复用建议**:这一整层几乎全部可复用!是最值得沉淀的工具库。新项目只需写 `preprocess_xxx()` 编排函数。
---
### 4. feature_engineering.py — 特征工程
| 函数 | 类型 | 说明 |
|------|------|------|
| `select_kbest_features()` | ✅ 可复用 | SelectKBest特征选择 |
| `rfe_feature_selection()` | ✅ 可复用 | RFE递归特征消除 |
| `get_feature_importance()` | ✅ 可复用 | 随机森林特征重要性 |
| `add_interaction_features()` | ✅ 可复用 | 添加交互/组合特征 |
| `feature_engineering_heart()` | ❌ 项目特定 | 心脏病特征工程编排 |
**复用建议**:特征选择函数全部通用;交互特征的具体组合是业务相关的。
---
### 5. train.py — 模型训练
| 函数 | 类型 | 说明 |
|------|------|------|
| `train_logistic_regression()` | ✅ 可复用 | 逻辑回归训练 |
| `train_random_forest()` | ✅ 可复用 | 随机森林训练 |
| `train_gradient_boosting()` | ✅ 可复用 | GBDT训练 |
| `train_svm()` | ✅ 可复用 | SVM训练 |
| `grid_search_model()` | ✅ 可复用 | 网格搜索调参 |
| `cross_validate_model()` | ✅ 可复用 | 交叉验证 |
| `save_model() / load_model()` | ✅ 可复用 | 模型保存/加载 |
| `train_heart_models()` | ❌ 项目特定 | 心脏病多模型对比编排 |
**复用建议**:所有单模型训练函数 + 调参 + 保存加载 都可以直接复用。
---
### 6. evaluate.py — 模型评估
| 函数 | 类型 | 说明 |
|------|------|------|
| `evaluate_classifier()` | ✅ 可复用 | 通用分类评估(指标+混淆矩阵+ROC) |
| `compare_models()` | ✅ 可复用 | 多模型对比柱状图 |
| `evaluate_heart_model()` | ❌ 项目特定 | 心脏病评估入口 |
**复用建议**:`evaluate_classifier` 是通用的,任何二分类任务都能直接用。
---
### 7. predict.py — 模型预测/推理
| 函数 | 类型 | 说明 |
|------|------|------|
| `load_model_and_preprocessors()` | ✅ 可复用 | 一键加载模型+scaler+特征列表 |
| `predict_single()` | ✅ 可复用 | 单样本预测 |
| `predict_batch()` | ✅ 可复用 | 批量预测 |
| `predict_heart_disease()` | ❌ 项目特定 | 心脏病预测入口 |
**复用建议**:推理框架通用,只需替换模型加载路径和输入字段。
---
## 如何运行
### 完整流程
```bash
cd heart_project
python main.py
```
### 只跑预处理和特征工程(不训练)
```bash
python main.py --no-train
```
### 跳过EDA(已有图表,直接训练)
```bash
python main.py --no-eda
```
### 单独测试预测
```bash
python predict.py
```
## 未来复用总结
**可以抽成通用工具库的部分(建议单独建 `ml_utils/` 文件夹):**
1. 数据加载:`load_csv`, `split_data`
2. 预处理:缺失值填补、异常值检测/截断、标准化、编码
3. 特征选择:SelectKBest, RFE, 特征重要性
4. 模型训练:LR/RF/GBDT/SVM 训练 + 网格搜索 + 交叉验证
5. 模型评估:分类指标计算 + 混淆矩阵 + ROC曲线
6. 模型推理:模型加载 + 单/批量预测
**每个新项目只需要写3个文件:**
1. `data_loader_xxx.py` — 加载本项目数据
2. `preprocess_xxx.py` — 编排本项目的预处理流程
3. `main.py` — 串联整个流程,替换成本项目的数据和目标变量
> 核心思想:**通用逻辑全部封装成函数,项目特定的部分只做编排和调用。**
> 新项目 80% 的代码可以直接复用,只需写 20% 的业务逻辑。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
|