
1 / 5
CatBoost 算法原理及 Python 实现
一、概述
CatBoost 是在传统 GBDT 基础上改进和优化的一种算法,由俄罗斯 Yandex 公司开发,
于 2017 年开源,在处理类别型特征和防止过拟合方面有独特优势。
在实际数据中,存在大量的类别型特征,如性别、颜色、类别等,传统的算法通常需要
在预处理中对这些特征进行独热编码(One-Hot Encoding)或标签编码(Label Encoding)。
但这些方法存在一些问题,独热编码会增加数据的维度,导致模型训练时间变长;标签编码
可能会引入不必要的顺序关系,影响模型的准确性。CatBoost 采用了一种独特的处理方式,
称为 “Ordered Target Statistics”(有序目标统计),它通过对数据进行排序,利用数据
的顺序信息来计算类别型特征的统计量,从而将特征有效地融入到模型中,避免了传统编码
方式的弊端。
另外,在构建决策树时,CatBoost 采用了对称树的结构,与传统的非对称决策树相比,
对称树在生长过程中,每层的节点数量相同,结构更加规整。这种结构使得模型在训练过程
中更加稳定,能够减少过拟合的风险,同时也有助于提高训练速度。
二、算法原理
1.对称树结构
对称树结构在形式上是完全二叉树结构,是指在构建决策树时,对于每个节点的分裂,
都考虑所有可能的特征和阈值组合,并且在树的同一层中,所有节点的分裂方式是对称的。
具体可描述为
特征选择:在构建对称树时,CatBoost 会对所有可用的特征进行评估,计算每个特征
对于目标变量的重要性。通过一些统计指标,如信息增益、基尼系数等,来衡量特征对数据
划分的有效性,选择具有最高重要性的特征作为当前节点的分裂特征。
阈值确定:对于选定的分裂特征,CatBoost 会遍历该特征的所有可能取值,寻找一个
最优的分裂阈值,使得分裂后的两个子节点能够最大程度地分离不同类别的数据,或者使目
标变量在两个子节点上的分布具有最大的差异。
对称分裂:一旦确定了分裂特征和阈值,就在当前节点上按照这个特征和阈值进行分裂,
将数据集分为左右两个子节点。在树的同一层中,所有节点都按照相同的特征选择和阈值确
定方法进行分裂,形成对称的树结构。
作者:禺垣