导读:在机器学习领域,处理类别型特征一直是个棘手的问题。传统的GBDT算法在这一领域的表现并不尽如人意,直到CatBoost的出现。今天,我们就来聊聊CatBoost是如何优雅地解决这一难题的,以及它在实际应用中的强大之处。
1、算法简介
CatBoost(Categorical Boosting)是一种梯度提升树算法,能够处理分类和回归问题,由俄罗斯的Yandex公司开发。CatBoost和XGBoost、LightGBM一样,也是一种GBDT算法框架下的改进算法,它通过迭代构建多个弱学习器(通常是决策树),逐步减小预测残差,从而提升模型的整体性能。每轮迭代中,模型会计算残差的负梯度作为新的学习目标,训练一个决策树来拟合该梯度,并以适当的学习率将新树加入到累加函数中。
CatBoost主要有以下几个特点:
- 类别型特征支持:CatBoost可以自动处理类别型特征,无需用户手动进行One-Hot编码或其他转换。包括空值处理、ordered TS编码、特征组合。
- 对称树(Oblivious Trees):CatBoost构建对称树作为基学习器,这意味着树的每个节点使用相同的特征和分割值进行分裂,这有助于减少过拟合并提高模型的泛化能力。
- 有序提升(Ordered Boosting):CatBoost使用一种特殊的提升方法,通过在不同的数据子集上分别训练模型和计算残差来避免梯度偏差和预测偏移,从而减少过拟合。
2、类别型特征处理基本原理
类别型特征处理是CatBoost的主要特点之一,可以解决空值、类别型编码、特征组合的问题。
1、空值处理:CatBoost算法在训练过程中会自动检测到数据中的缺失值,在决策树的每个节点分割过程中,CatBoost会考虑缺失值作为一种可能的分支路径。如果特征值缺失,算法会为缺失值选择一个最佳的分裂方向。
2、ordered TS编码:它是一种基于目标变量的统计信息来为类别特征的每个类别赋予数值的方法。Ordered TS编码特别适用于有序的类别特征,即类别之间存在自然顺序,在CatBoost算法中,会对样本进行多次洗牌,每次得到不同排序状态的样本集。排序的目的产生一种随机性,减少过拟合。每一轮迭代、构建一个树时,都会选择一种排序状态的样本集,这样在不同轮次迭代中,不同排序状态的样本集综合起来,会使模型的方差更小,越不容易过拟合。然后计算每个类别目标值的平均值。例如,如果目标变量是二元的(如0和1),则计算每个类别特征值对应的目标值为1的平均比例。
3、特征组合:CatBoost可以自动组合不同类别型特征的值,形成新的特征,以捕获特征间的交互效应。特征组合的生成是基于目标统计,CatBoost会分析不同特征组合对预测目标变量的影响。
3、GBDT、XGBoost、LightGBM、CatBoost差异
从结构上来说,XGBoost、LightGBM和CatBoost都是boosting算法,其基学习器都为决策树,同时都是使用贪婪的思想来实现决策树的生长。他们之间的主要差异如下:
差异 | GBDT | XGBoost | CatBoost | LightGBM |
---|---|---|---|---|
类别型特征处理 | 手动处理 | 手动处理 | Ordered TS编码 | GS编码,不如CatBoost |
基学习器 | 传统决策树,通过贪心算法生成树 | Leaf-wise(层次增长),在某些情况下可能会导致不必要的计算开销 | 对称树,有助于减少过拟合并提高模型的泛化能力 | Leaf-wise(叶子增长),从当前所有叶子中找到分裂增益最大的一个叶子进行分裂,这种方式可以更快地找到全局最优解,但可能会生长出较深的树 |
防止过拟合 | 参数调优和正则化 | 加入了L1和L2正则化 | Ordered Boosting | 最大深度限制和特征分箱策略 |
训练速度 | 较慢 | 快 | 快 | 非常快 |
内存效率 | 一般 | 较高 | 一般 | 高 |
并行运算 | 支持,不完善 | 支持,较完善 | 支持,GPU | 支持,GPU加速高效 |
大数据集处理 | 较差 | 较好 | 较好 | 好 |
参考材料:
Dorogush A V, Ershov V, Gulin A. CatBoost: gradient boosting with categorical features support[J]. arXiv preprint arXiv:1810.11363, 2018.
https://zhuanlan.zhihu.com/p/346420728
https://zhuanlan.zhihu.com/p/477750675