使用gbdt时类别特征的处理方法

在去年第一次参加ctr比赛中碰到类别特征时,第一反应是进行one-hot编码而不能使用序号编码,因为序号编码给类别的不同属性赋予了数值的意义,然而在实际比赛中发现,one-hot编码后的效果并不好,甚至和直接序号编码的效果不相上下,但是带来训练时间的增加非常大,那么为什么对类别进行one-hot编码和label编码效果差不多,而不是更好呢?在参加比赛之后我对这些有了更多的见解,在此总结。

其实对类别特征进行onehot编码带了效果很差更多指的是类别特征维度很高的时候(相对样本量来说),主要的问题是:

1.可能无法在这个类别特征上进行切分。使用one-hot coding的话,意味着在每一个决策节点上只能用 one-vs-rest (例如是不是狗,是不是猫,等等) 的切分方式。当特征纬度高时,每个类别上的数据都会比较少,这时候产生的切分不平衡,切分增益(split gain)也会很小(比较直观的理解是,不平衡的切分和不切分几乎没有区别)。

2.会影响决策树的学习。因为就算可以在这个类别特征进行切分,也会把数据切分到很多零散的小空间上,如下图左所示。而决策树学习时利用的是统计信息,在这些数据量小的空间上,统计信息不准确,学习会变差。但如果使用下图右边的切分方法,数据会被切分到两个比较大的空间,进一步的学习也会更好。

也就是说,正确的做法应该是一次切分,均匀

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值