ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

如何解决树模型中one_hot的问题

2021-01-29 19:53:50  阅读:220  来源: 互联网

标签:LightGBM 切分 特征 模型 label 类别 hot 解决 最优


问题引入

在做特征工程的时候,都会使用到one_hot编码,编码可以解决某些不能被数值化的问题,但是这种编码会带来很多问题,这点之前已经说过,那么如何解决这个问题呢?

问题解答

  1. 类别特征的最优切分。这个方法需要对应工具的支持,我所知的支持这个方法的工具有h2o.gbm和LightGBM,用LightGBM可以直接输入类别特征,并产生同图1右边的最优切分。在一个k维的类别特征寻找最优切分,朴素的枚举算法的复杂度是指数的 O(2^k)。LightGBM 用了一个 O(klogk)[1] 的算法。算法流程如图2所示:在枚举分割点之前,先把直方图按照每个类别对应的label均值进行排序;然后按照排序的结果依次枚举最优分割点。当然,这个方法很容易过拟合,所以LightGBM里面还增加了很多对于这个方法的约束和正则化。图3是一个简单的对比实验,可以看到Optimal的切分方法在AUC提高了1.5个点,并且时间只多了20% 。
  2. 转成数值特征。在使用 sklearn 或 XGBoost 等不支持类别特征的最优切分工具时,可以用这个方法。常见的转换方法有: a) 把类别特征转成one-hot coding扔到NN里训练个embedding;b) 类似于CTR特征,统计每个类别对应的label(训练目标)的均值。统计的时候有一些小技巧,比如不把自身的label算进去(leave-me-out, leave-one-out)统计, 防止信息泄露。
  3. 其他的编码方法,比如binary coding等等,同样可以用于不支持类别特征的算法。这里有一个比较好的开源项目,封装了常见的各种编码方法: https://github.com/scikit-learn-contrib/category_encoders

    喜欢就关注一下啦~~~


    图片


标签:LightGBM,切分,特征,模型,label,类别,hot,解决,最优
来源: https://blog.51cto.com/15069450/2610791

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有