本项目用于基于数值描述符预测配合物的分裂能,使用XGBoost回归模型进行训练和预测,自动包含SHAP特征重要性分析。
Excel表格列结构(配置在 src/config.py):
- 第1列:序号
- 第2列:配合物详细信息
- 第4-5列:字符描述符(中心金属/配体说明)
- 第6-17列:数值描述符(用于模型训练的特征)
- 第18列:分裂能(预测目标)
# 进入项目目录
cd C:\ML\机器学习lyp
# 安装依赖包
pip install -r requirements.txt主要依赖包:pandas, numpy, scikit-learn, xgboost, shap, matplotlib, openpyxl, joblib
将数据文件放置在 data/ 目录:
data/配合物训练集.xlsx- 训练数据data/配合物验证集.xlsx- 验证数据
# 相关性分析
python -m src.correlations
# PCA分析
python -m src.pca_analysis
# XGBoost训练(自动包含SHAP分析)
python -m src.train# 使用默认参数(400代)
python -m src.train
# 自定义训练代数
python -m src.train --n-estimators 1000重要说明:
- ✅ SHAP分析自动运行:每次训练都会自动生成SHAP特征重要性分析
- ✅ 统一时间戳命名:模型和SHAP文件使用相同的时间戳,方便对应查找
- ✅ 模型使用早停机制(默认关闭):可在
src/train.py第86行修改
训练脚本会依次执行:
- 加载数据 - 读取训练集和验证集
- 数据预处理 - 提取第6-17列特征,第18列目标值,处理缺失值,标准化
- 模型训练 - 使用XGBoost训练,记录每一代的Loss、MAE、RMSE
- 绘制曲线 - 生成训练历史曲线图
- 模型评估 - 在验证集上评估性能
- 保存结果 - 保存模型、指标和预测结果
- SHAP分析 - 自动进行特征重要性分析(新增)
训练完成后,所有输出文件保存在 outputs/ 目录,使用相同的时间戳(例如 20251024_203045):
| 文件名 | 说明 |
|---|---|
xgb_loss_curve.png |
Loss (RMSE) 随训练代数变化曲线 |
xgb_mae_curve.png |
MAE 随训练代数变化曲线 |
xgb_rmse_curve.png |
RMSE 随训练代数变化曲线 |
shap_YYYYMMDD_HHMMSS.png |
SHAP特征重要性汇总图(自动生成) |
correlation_heatmap_pearson.png |
Pearson相关性热力图 |
correlation_heatmap_spearman.png |
Spearman相关性热力图 |
pca_train.png |
PCA降维可视化图 |
| 文件名 | 说明 |
|---|---|
xgb_training_history.csv |
完整训练历史(每一代的Loss、MAE、RMSE) |
xgb_metrics.json |
最终评估指标(训练集和验证集的MAE、RMSE) |
xgb_predictions.csv |
验证集预测结果(真实值、预测值、误差) |
shap_YYYYMMDD_HHMMSS.csv |
SHAP值CSV表格(自动生成,可用Excel打开) |
shap_YYYYMMDD_HHMMSS.npy |
SHAP值数组(自动生成,可用numpy读取) |
shap_importance_YYYYMMDD_HHMMSS.csv |
SHAP特征重要性排名(自动生成) |
correlations_pearson_full.csv |
Pearson相关系数完整矩阵 |
correlations_spearman_full.csv |
Spearman相关系数完整矩阵 |
| 文件名格式 | 说明 |
|---|---|
xgb_YYYYMMDD_HHMMSS.pkl |
训练好的XGBoost模型(含时间戳) |
模型文件包含:训练好的XGBoost模型、数据预处理器(填充器和标准化器)、评估指标、特征列和目标列信息
打开 outputs/figures/ 目录下的三张曲线图:
- Loss曲线:观察训练集和验证集的Loss是否收敛
- MAE曲线:观察平均绝对误差的变化趋势
- RMSE曲线:观察均方根误差的变化趋势
正常情况:训练集和验证集曲线都应该下降且趋势相近;如果验证集曲线上升,说明过拟合
用文本编辑器或浏览器打开 outputs/reports/xgb_metrics.json:
{
"train": {"MAE": 123.45, "RMSE": 234.56},
"valid": {"MAE": 345.67, "RMSE": 456.78}
}- MAE:平均绝对误差,越小越好
- RMSE:均方根误差,越小越好
用Excel打开 outputs/reports/xgb_predictions.csv,可以:
- 对比真实值和预测值的差异
- 找出误差较大的样本
- 分析预测偏差的规律
打开 outputs/figures/shap_YYYYMMDD_HHMMSS.png:
图表组成:
- Y轴:特征名称(从重要到不重要排序)
- X轴:SHAP值(特征对预测的贡献)
- 颜色:特征的实际数值(红=高,蓝=低)
- 点的位置:每个样本在该特征上的SHAP值
解读方法:
- 排在最上面的特征是最重要的
- SHAP值为正表示该特征增加预测值,为负表示降低预测值
- 如果红点集中在右侧,说明该特征值越大,预测值越大
- 如果蓝点集中在右侧,说明该特征值越小,预测值越大
用Excel打开 outputs/reports/shap_YYYYMMDD_HHMMSS.csv:
- 每一行:一个样本
- 每一列:一个特征的SHAP值
- 数值为正:该特征增加预测值
- 数值为负:该特征降低预测值
用Excel打开 outputs/reports/shap_importance_YYYYMMDD_HHMMSS.csv:
| feature | importance |
|---|---|
| feat_3 | 0.1234 |
| feat_7 | 0.0987 |
| ... | ... |
越靠前的特征对预测越重要。
如需修改列位置或其他配置,编辑 src/config.py:
TEXT_COLS_POS = [3, 4] # 字符列位置
DESCRIPTOR_COLS_RANGE = (5, 17) # 数值特征列范围(第6-17列)
TARGET_COL_POS = 17 # 目标列位置(第18列)
RANDOM_STATE = 42 # 随机种子机器学习lyp/
├── data/ # 数据目录
│ ├── 配合物训练集.xlsx
│ └── 配合物验证集.xlsx
├── outputs/ # 输出目录
│ ├── figures/ # 图片
│ ├── reports/ # 报告和数据
│ └── models/ # 模型文件
├── src/ # 源代码
│ ├── config.py # 配置文件
│ ├── data_loader.py # 数据加载
│ ├── train.py # 训练脚本(自动包含SHAP)
│ ├── shap_analysis.py # SHAP分析模块
│ ├── correlations.py # 相关性分析
│ └── pca_analysis.py # PCA分析
├── requirements.txt # 依赖包列表
└── README.md # 本文件