机器学习——集成学习框架(GBDT、XGBoost、LightGBM、CatBoost)、调参方法
一、集成学习框架
对训练样本较少的结构化数据领域,Boosting算法仍然是常用项
XGBoost、CatBoost和LightGBM都是以决策树为基础的集成学习框架
三个学习框架的发展是:XGBoost是在GBDT的基础上优化而来,CatBoost和LightGBM是在XGBoost的基础上优化而来
三个学习框架的决策树构造方式:XGBoost是按照层生成(level-wise)得到的是对称树,避免过拟合但存在冗余分裂;CatBoost也是对称树,其为完全二叉树;LightGBM使用的是叶子生长(level-wise),其得到是一个不对称树
三个学习框架对类别特征的处理:XGBoost不能自动处理类别特征,对于其中的类别特征,需要人工手动出来成数值形式用于模型训练;LightGBM只需要指定类别特征名称,其内置的算法会自动对其进行处理;CatBoost是专门处理类别特征,其中内置的目标变量统计的特征编码方式实现对数据类别特征的高效处理
知识补充:对称树关注的是结构对称性,而完全二叉树强调层序填充的完整性。两者在定义、构造条件和应用场景上截然不同,但也存在交集(如完全对称的满二叉树)
对称树:二叉树的左右子树呈镜像对称,不能出现左或右子树缺失,或者对应对称节点值不等的情况
完全二叉树:深度为k的二叉树,若其前k-1层节点数达到最大值,且第k层节点从左到右。
连续排列,则称为完全二叉树
在对某一数据集进行多模型训练和测试分类效果比较时:需要展现的表格效果为:
模型1
模型2
.................
模型n
基本超参数
训练集AUC
测试集AUC
训练时间(s)
测试时间(s)
知识补充:AUC是模型在数据上的分类排序能力量化指标,其核心价值在于评估模型拟合能力及辅助判断过拟合
二、调参优化
机器学习中有大量的参数需要人为事先设定,这些统称为超参数(hyperparameter),常见的就如同epoch、batch_size、树深度、学习率和正则化系数等参数的设定
下面来介绍机器学习中常用的调参方法:需要强调的是超参数的最优选择是在模型的验证过程中,即此时需要用到验证集,需要提取对数据集划分好(因为超参数是不参与模型内部参数的自动更新,其是通过外部调优确定最佳取值)
①随机调参法( random search,不是所有超参数组合都尝试)
其采用的方式是对给定分布中抽样规定数量的参数,对这些抽样的超参数进行实验,选取其中模型验证集损失误差最小时的超参数组合即可。有时这种方式更为高效
②网格搜索法(grid search,所有超参数组合都尝试)
这种方法的思路很好理解,其主要适用的场景包括:优化三个及其以下的超参数数量。具体方法:比如我现在有三个参数a/b/c,我想得到三个参数组合的最优模型参数,那么我预先设定三个参数的候选值列表(预设一个待搜索的参数列表空间):a:[0.1,0.3.0.5],b:[50,100,150],c:[3,5,7],那么此时总共的组合方式为3×3×3=27种(笛卡尔乘积组合),此时就依次遍历这27种组合用于模型的参数设置,选择其中模型验证集损失误差最小时的超参数组合即可
③贝叶斯调参优化法(bayesian optimization,这种方式可以同时出来很多参数,当然其计算资源的增加也是指数级别的增加)
贝叶斯优化调参是目前最好的调参方法,贝叶斯优化的核心价值在于以最少试错成本逼近全局最优解。其中的优化方法涉及高斯过程和贝叶斯定理。其高斯过程的核心是对已有的数据点预测区域进行函数建模,求其不确定性和概率分布,对其中概率较大的区间的进行迭代,使得模型的损失达到最低时对应的超参数组合选择,但是这种方式比较消耗计算资源
其核心思想很好理解:比如在使用贝叶斯优化方法时,我希望在目前选择的一个参数1条件下(前提),使得其去组合另外一个参数2,使得模型效果更好,那么我怎么更好的去寻找到满足前提条件中最好的值(即这个前提条件是最优的),此时寻找的方法就可以使用高斯过程,找到这个最好的前提条件值,此时就只需要对另外一个参数2做考虑即可,迭代参数2的范围,找到模型性能最好的那组对应的超参数组合。幸运的是,目前这个好理解但实现复杂的方法已经被封装在bayes_opt中,可以在pycharm中直接调用使用