4. 环境搭建与数据准备
在开始特征回放效果评估之前,需要搭建一个稳定、可复现的实验环境。本章将指导你完成 Python 环境配置、XGBoost 及相关库的安装,并生成模拟数据集,为后续的模型训练与评估奠定基础。
4.1 Python 环境要求
推荐使用 Python 3.8 至 3.11 版本,并基于虚拟环境进行开发,以避免依赖冲突。以下为经过验证的推荐环境配置:
| 组件 | 推荐版本 | 说明 |
|---|---|---|
| Python | 3.9 / 3.10 / 3.11 | 3.8 以下版本对部分新库支持不佳 |
| 操作系统 | Linux / macOS / Windows | Linux 下 XGBoost 多线程性能最优 |
| 包管理工具 | pip 23+ / conda 23+ | 推荐使用 conda 管理 GPU 版本 |
| 虚拟环境 | venv / conda env | 隔离项目依赖,避免版本冲突 |
💡 建议: 使用
conda create -n xgb_eval python=3.10 创建专用虚拟环境,后续所有安装操作均在该环境中执行。
4.2 XGBoost 与相关库安装
本教程的核心依赖包括 XGBoost、数据处理库(NumPy、Pandas)、可视化库(Matplotlib、Seaborn)以及模型评估工具(Scikit-learn)。安装命令如下:
# 基础安装(CPU 版本)
pip install xgboost==2.0.3 numpy==1.24.3 pandas==2.0.3 scikit-learn==1.3.0 matplotlib==3.7.2 seaborn==0.12.2
# 如需 GPU 加速(Linux + CUDA 11.x/12.x)
pip install xgboost==2.0.3 --index-url https://download.pytorch.org/whl/cu118
# 或使用 conda 安装 GPU 版本
conda install -c conda-forge xgboost=2.0.3
| 库名 | 版本 | 用途 |
|---|---|---|
| xgboost | 2.0.3 | 梯度提升树模型训练与特征重要性计算 |
| numpy | 1.24.3 | 数值计算与数组操作 |
| pandas | 2.0.3 | 数据框操作与特征工程 |
| scikit-learn | 1.3.0 | 数据划分、评估指标与交叉验证 |
| matplotlib | 3.7.2 | 基础图表绘制 |
| seaborn | 0.12.2 | 统计图形美化 |
⚠️ 版本兼容性: XGBoost 2.0+ 对 Python 3.11 支持良好,但若使用 Python 3.12,建议降级至 3.10 或 3.11,避免潜在的 ABI 不兼容问题。
4.3 模拟数据集生成
为了聚焦特征回放效果的评估逻辑,我们使用 make_classification 生成一个包含 20 个特征的二分类模拟数据集。其中部分特征被设计为“冗余特征”或“噪声特征”,用于模拟真实场景中特征质量参差不齐的情况。
from sklearn.datasets import make_classification
import pandas as pd
import numpy as np
# 生成 2000 个样本,20 个特征,其中 5 个为冗余特征
X, y = make_classification(
n_samples=2000,
n_features=20,
n_informative=10,
n_redundant=5,
n_repeated=0,
n_clusters_per_class=2,
random_state=42
)
# 转换为 DataFrame,便于后续操作
feature_names = [f'feat_{i:02d}' for i in range(20)]
df = pd.DataFrame(X, columns=feature_names)
df['target'] = y
print(f"数据集形状: {df.shape}")
print(f"正样本比例: {y.mean():.2%}")
生成的数据集具有以下特点:
- 样本量: 2000 条,适合快速迭代实验
- 特征维度: 20 维,包含 10 个信息特征、5 个冗余特征、5 个噪声特征
- 类别平衡: 正负样本比例约为 50:50,避免类别不平衡带来的评估偏差
4.4 数据划分策略
为了准确评估特征回放效果,需要将数据集划分为训练集、验证集和测试集。本教程采用以下划分策略:
- 训练集 (60%): 用于模型训练与特征重要性计算
- 验证集 (20%): 用于超参数调优与早停(Early Stopping)
- 测试集 (20%): 用于最终模型评估与特征回放效果验证
from sklearn.model_selection import train_test_split
# 先划分出测试集
X_temp, X_test, y_temp, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)
# 再从剩余数据中划分训练集和验证集
X_train, X_val, y_train, y_val = train_test_split(
X_temp, y_temp, test_size=0.25, random_state=42, stratify=y_temp
)
print(f"训练集: {X_train.shape[0]} 样本")
print(f"验证集: {X_val.shape[0]} 样本")
print(f"测试集: {X_test.shape[0]} 样本")
📌 关键点: 使用
stratify=y 参数确保划分后各数据集中正负样本比例与原始数据集一致,避免因随机划分导致的类别分布偏移。
4.5 环境验证
完成安装与数据准备后,运行以下代码验证环境是否配置正确:
import xgboost as xgb
import numpy as np
import pandas as pd
import sklearn
print(f"XGBoost 版本: {xgb.__version__}")
print(f"NumPy 版本: {np.__version__}")
print(f"Pandas 版本: {pd.__version__}")
print(f"Scikit-learn 版本: {sklearn.__version__}")
# 快速测试:训练一个简单模型
dtrain = xgb.DMatrix(X_train, label=y_train)
params = {'objective': 'binary:logistic', 'eval_metric': 'logloss', 'max_depth': 4}
model = xgb.train(params, dtrain, num_boost_round=10)
print("✅ 环境搭建成功,模型训练正常")