CatBoost: 自动处理CAT数据的GBDT

CatBoost = Category + Boosting
2017年7月21日,俄罗斯Yandex开源CatBoost,亮点是在模型中可直接使用Categorical特征并减少了tuning的参数。


建树的过程

  1. 初步计算splits
    对每个数值特征二值化,选择可能的分桶方式,结果用于选择树结构。binarization method (feature_border_type) 和number of buckets (border_count) 参数设置在初始参数中。
  2. 将categorical特征转化为numerical特征
    (也可以使用one-hot编码)
    有以下三步:
    (1). 随机重排输入对象;
    (2). 将target从浮点数转换为整数 (Regression/ Classification/ Multiclassification不同);
    (3). 将categorical特征转化为numerical特征 (与初始参数有关):
    • Borders: 这里写图片描述
      计算第i个Bucket的ctr (这里写图片描述),countInClass是target超过当前对象i的次数(按照随即重排后的顺序),totalCount是到当前对象为止的匹配次数,prior是初始参数(常数)。
    • Buckets: 这里写图片描述
      计算第i个Bucker的ctr(这里写图片描述),countInClass是target和当前对象相等的次数,totalCount和prior同上。
    • BinarizedTargetMeanValue: 这里写图片描述
      countInClass是当前cat的target总数和最大target总数的比,totalCount和prior同上。
    • Counter: 这里写图片描述
      curCount是训练集中具有当前特征的对象总数,maxCount是训练集中最大对象总数,prior同上。对于测试集,curCount取决于选择的计算方法:PrefixTest (具有当前特征的训练集中的对象数和到目前为止的测试集中的对象数),FullTest (具有当前特征的训练集和测试集中的对象数),SkipTest (具有当前特征的训练集中的对象数)。maxCount取决于选择的计算方法:PrefixTest (训练集和到目前为止测试集中的对象),FullTest (训练集和测试集),SkipTest (训练集)。prior同上。
  3. 选择树结构
    贪婪算法,找出所有可能分割方式,计算每种方式的惩罚函数,选择最小的,将结果分配个叶节点。后续叶节点重复此过程。在构建新树前进行随机重排,按梯度下降方向构建新树。

过拟合检测

  1. IncToDec
    在建每棵树之前,在测试集上检测损失的变化,如果CurrentPValue大于初始参数Thresold则认为过拟合。计算CurrentPValue的方法如下:
    这里写图片描述

  2. Iter
    在建每棵树之前,检查最小损失时的迭代次数,大于设置的参数值则认为过拟合。


参考:
https://tech.yandex.com/catboost/doc/dg/concepts/about-docpage/
https://www.analyticsvidhya.com/blog/2017/08/catboost-automated-categorical-data/

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值