LightGBM 是一种梯度提升树算法,可用于排序、分类和回归任务。本文由一系列 Jupyter Notebook 串成,介绍如何使用 LightGBM 训练二分类模型。本项目使用的数据集是 adult (・ω< )★
GitHub 项目地址:lightgbm-binary
🚀 本文亮点
- ✅ 使用 Optuna 做超参数寻优
- ✅ 使用 Treelite 做推理加速
- ✅ 使用 Graphviz 做决策树模型可视化
- ✅ 使用
scale_pos_weight
参数,解决样本不均衡问题 - ✅ 对标签概率生成标签的阈值寻优 (
y_pred -> y
),详见util.gen_threshold
- ✅ 编写自适应学习率衰减函数提高 AUC,详见
util.AdaptiveLearningRate
- ✅ 编写一站式评估函数,可一次性输出多种指标,包括 accuracy, precision, recall, f1_score, auc, cross-entropy loss, confusion matrix,详见
util.eval_binary
✨ 注意:以下代码运行时依赖 util.py 文件
一、数据可视化
- 导入数据
- 统计描述
describe()
方法info()
方法- 统计各字段枚举值数量
- 查看字段下所有枚举值
- 查看空值个数
- 可视化
- 标号的值的比例
- 小提琴图 (Violin Plot)
二、预处理与特征选择
- 预处理
- 标签编码
- 更好的编码方式?
- 初次训练
- 使用
lgb.LGBMClassifier
进行训练 - 使用原生 API 进行训练
- 使用
- 简单评估
- 模型存储与导入
- 模型存储
- 模型导入
- 特征选择
- 计算特征的重要程度
- 多次实验求均值
三、超参数微调
- 简单的例子
- 稍微复杂的例子:随机森林
- 导入数据
- one-hot 编码
- 训练
- 评估
- 超参数微调
- 使用微调后的超参数训练
- LightGMB 超参数微调
- 单次训练
- 超参数寻优
- 使用微调后的超参数训练
- 学习率衰减
- 指数衰减
- 自适应衰减
四、训练与评估
- 基础模型
- N 折交叉验证
- 超参寻优:N 折交叉验证
- 使用微调后的超参数训练
- 阈值选择 (
y_pred -> y
)- 使用
np.rint
- 尝试:考虑原标号的分布
- 训练标号的分布情况
- 预测标号的概率密度函数 (PDF)
- 预测标号的概率分布函数 (CDF)
- 当 CDF =
训练数据 0 标号比例
时反推阈值
- 使用 optuna 寻优
- 使用
- 评估
- 混淆矩阵
- 准确率
- 精确率和召回率
f1
值log_loss
交叉熵损失- ROC 曲线 与 AUC
- 一站式评估函数
五、加速推理
- 导入模型和数据
- 使用 Treelite 加速推理
- 推理速度
- 推理准度
- 通用函数
六、部署
- 模型训练
- 模型部署
- 离线部署
- 在线部署
七、模型可视化
- 创建可交互的可视化界面
- 将决策树存成 PNG / PDF
参考: