target encoding

  • 2020 年 4 月 26 日
  • AI

from

CatBoost算法梳理datacruiser.io图标

貌似是datawhale的大佬出的,在公众号上看过。

下面主要针对上述材料进行注释。

用类别对应的标签的期望来代替原始的类别,所谓的期望,简单理解为均值即可。

最原始的:

举个例子吧,比如有10个样本,对应的某个类别特征是:A A A A A B B B B B,则A转换为greedy ts的形式,则要先看A对应的标签y是啥情况,假设A A A A A对应的标签为 1 1 1 0 1,则按照上面的公式为 (1*1+1*1+1*1+1*0+1*1)/5=0.8

显然这种方式容易过拟合于训练集,极端的例子是,还是以上面为例子,假设某个类别特征是:A B C D E F G H I J,其标签对应的为:1 0 1 0 1 1 1 0 0 1,则根据上面的公式我们计算的结果为:1 0 1 0 1 1 1 0 0 1,显然发生了标签泄露了,因此这种编码方式基本不用了,而是采用了后面的改进版本的target encoding方式(也可以称为target statistics)

这个是目前实现最多的target encoding的定义方式,可以说基本上都是按照这个公式定义的,有的地方这里的p直接设置为全部标签的均值,这里的参数alpha是一个用户自定义的参数,用于调节先验在最终的编码结果中的贡献程度。

然而这种方式仍旧会面临着:

左边代表训练集右边代表测试集,我们当然希望同一个类别在不同的数据集中能够保持一致的与y之间的关联关系,但是显然很多时候训练集和测试集的分布是存在一定差异的,因此使用target encoding会引入一定偏差。

其实这二类ts的方法我基本没怎么见到有人用过。

为了缓解 target encoding的偏差问题,出现了后来的mean encoding以及加入噪声的target encoding,mean encoding引入了类似于集成的思想,在不同的原始数据的抽样子集下计算target encoding值,然后平均。

catboost采用的order ts的方式,很奇怪的编码方式。。。具体的可见:

马东什么:catboost完全指南zhuanlan.zhihu.com图标