一文详尽系列之CatBoost

CatBoost是一款强大的机器学习库,以其处理类别特征的能力、优秀的抗过拟合性能和高精度而著称。它支持GPU加速,并提供内置的类别变量处理,减少了预处理工作。然而,使用CatBoost可能会增加计算时间和存储需求,且调参过程可能较为耗时。
摘要由CSDN通过智能技术生成

点击上方“Datawhale”,选择“星标”公众号

第一时间获取价值内容

CatBoost

CatBoost是俄罗斯的搜索巨头Y andex在2017年开源的机器学习库,也是Boosting族算法的一种,同前面介绍过的XGBoost和LightGBM类似,依然是在GBDT算法框架下的一种改进实现,是一种基于对称决策树(oblivious trees)算法的参数少、支持类别型变量和高准确性的GBDT框架,主要说解决的痛点是高效合理地处理类别型特征,这个从它的名字就可以看得出来,CatBoost是由catgorical和boost组成,另外是处理梯度偏差(Gradient bias)以及预测偏移(Prediction shift)问题,提高算法的准确性和泛化能力。
集成学习
CatBoost主要有以下五个特性:
  • 无需调参即可获得较高的模型质量,采用默认参数就可以获得非常好的结果,减少在调参上面花的时间
  • 支持类别型变量,无需对非数值型特征进行预处理
  • 快速、可扩展的GPU版本,可以用基于GPU的梯度提升算法实现来训练你的模型,支持多卡并行
  • 提高准确性,提出一种全新的梯度提升机制来构建模型以减少过拟合
  • 快速预测,即便应对延时非常苛刻的任务也能够快速高效部署模型
CatBoost的主要算法原理可以参照以下两篇论文:
  • Anna Veronika Dorogush, Andrey Gulin, Gleb Gusev, Nikita Kazeev, Liudmila Ostroumova Prokhorenkova, Aleksandr Vorobev "Fighting biases with dynamic boosting". arXiv:1706.09516, 2017
  • Anna Veronika Dorogush, Vasily Ershov, Andrey Gulin "CatBoost: gradient boosting with categorical features support". Workshop on ML Systems at NIPS 2017

Categorical features

所谓类别型变量(Categorical features)是指其值是离散的集合且相互比较并无意义的变量,比如用户的ID、产品ID、颜色等。 因此,这些变量无法在二叉决策树当中直接使用。 常规的做法是将这些类别变量通过预处理的方式转化成数值型变量再喂给模型,比如用一个或者若干个数值来代表一个类别型特征。
目前广泛用于 低势(一个有限集的元素个数是一个自然数)类别特征的处理方法是 One-hot encoding : 将原来的特征删除,然后对于每一个类别加一个0/1的用来指示是否含有该类别的数值型特征。 One-hot encoding 可以在数据预处理时完成,也可以在模型训练的时候完成,从训练时间的角度,后一种方法的实现更为高效,CatBoost对于低势类别特征也是采用后一种实现。
显然,在 高势特征当中,比如 user ID ,这种编码方式会产生大量新的特征,造成维度灾难。 一种折中的办法是可以将类别分组成有限个的群体再进行 One-hot encoding 。 一种常被使用的方法是根据目标变量统计(Target Statistics,以下简称TS)进行分组,目标变量统计用于估算每个类别的目标变量期望值。 甚至有人直接用TS作为一个新的数值型变量来代替原来的类别型变量。 重要的是,可以通过对TS数值型特征的阈值设置,基于对数损失、基尼系数或者均方差,得到一个对于训练集而言将类别一分为二的所有可能划分当中最优的那个。 在LightGBM当中,类别型特征用每一步梯度提升时的梯度统计(Gradient Statistics,以下简称GS)来表示。 虽然为建树提供了重要的信息,但是这种方法有以下两个缺点:
  • 增加计算时间,因为需要对每一个类别型特征,在迭代的每一步,都需要对GS进行计算;
  • 增加存储需求,对于一个类别型变量,需要存储每一次分离每个节点的类别。
为了克服这些缺点,LightGBM以损失部分信息为代价将所有的长尾类别归位一类,作者声称这样处理高势特征时比起 One-hot encoding 还是好不少。 不过如果采用TS特征,那么对于每个类别只需要计算和存储一个数字。
如此看到,采用TS作为一个新的数值型特征是最有效、信息损失最小的处理类别型特征的方法。 TS也被广泛采用,在点击预测任务当中,这个场景当中的类别特征有用户、地区、广告、广告发布者等。 接下来我们着重讨论TS,暂时将 One-hot encoding 和GS放一边。
Target statistics
一个有效和高效的处理类别型特征 的方式是用一个与某些TS相等的数值型变量 来代替第 个训练样本的类别 。 通常用基于类别的目标变量 的期望来进行估算:
Greedy TS
估算 最直接的方式就是用训练样本当中相同类别 的目标变量 的平均值。
显然,这样的处理方式很容易引起过拟合。 举个例子,假如在整个训练集当中所有样本的类别 都互不相同,即 个样本有 个类别,那么新产生的数值型特征的值将与目标变量的值相同。 某种程度上,这是一种目标穿越(target leakage),非常容易引起过拟合。 比较好的一种做法是采用一个先验概率 进行平滑处理:
其中 是先验概率 的权重,而对于先验概率,通常的做法是设置为数据集当中目标变量的平均值。
不过这样的平滑处理依然无法完全避免目标穿越: 特征 是通过自变量 的目标 计算所得。 这将会导致条件偏移: 对于训练集和测试集, 的分布会有所不同。 再举个例子,假设第 个特征为类别型特征,并且特征所有取值为无重复的集合,然后对于每一个类别 ,对于一个分类任务,我们有 。 然后在训练集当中, ,于是用阈值 就可以仅用一次分裂就训练集完美分开。 但是,对于测试集,因为还无法判断此时目标变量的类别,所以这一项 ,最后得到的TS值为 ,并且得到的模型在$p
其中, 是第 个训练样本。
在我们的例子当中,, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值