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同上。
  1. 选择树结构
    贪婪算法,找出所有可能分割方式,计算每种方式的惩罚函数,选择最小的,将结果分配个叶节点。后续叶节点重复此过程。在构建新树前进行随机重排,按梯度下降方向构建新树。

过拟合检测

  1. IncToDec
    在建每棵树之前,在测试集上检测损失的变化,如果CurrentPValue大于初始参数Thresold则认为过拟合。计算CurrentPValue的方法如下:
  2. GBDT的特征重要性排序原理 gbdt特征处理_机器学习

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

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