lightgbm怎么处理分类变量?

  统计/机器学习 监督式学习 数据预处理    浏览次数:997        分享
0

LGBMClassifier在fit时可以输入categorical_feature,这样所有的分类变量不需要进行one-hot encoding。

那么lgbm到底是怎么处理分类变量的?底层是什么原理?

 

泡椒   2019-11-15 08:14



   2个回答 
7

用独热编码来表示分类特征是很常见的,但是这种方法对于树模型来说不是最优的。特别是对于高基数分类特征,在单一热门特征上构建的树往往是不平衡的,需要增长得非常深才能达到良好的准确性。

最佳解决方案是通过将类别分类为2个子集来对类别特征进行拆分,而不是使用独热编码。 如果特征具有k个类别,则存在2 ^(k-1)-1个可能的分区。 但是对于回归树有一个有效的解决方案[1]。 它需要大约O(k * log(k))来找到最佳分区。

基本思想是在每次分组时根据训练目标对类别进行分类。 更具体地说,LightGBM根据其累积值(sum_gradient / sum_hessian)对直方图(用于分类特征)进行排序,然后在排序的直方图上找到最佳分割。


总结一下,就是加快了训练速度。


[1] Walter D. Fisher. “On Grouping for Maximum Homogeneity.” Journal of the American Statistical Association. Vol. 53, No. 284 (Dec., 1958), pp. 789-798.

参考自官方文档

SofaSofa数据科学社区DS面试题库 DS面经

cabbage   2019-11-17 20:19

2

它的原理是把这个categorical feature下所有的level分成两个子集,如果是3个level,就有3种分法,k个level就有$2^{k-1}-1$个分法,从中挑选最佳的一种分法。

在LGBMClassifier或者LGBMRegressor中,设置categorical_feature时一定要先进行label encoding,也就是分类特征的取值必须是整数。

SofaSofa数据科学社区DS面试题库 DS面经

简Cheng   2019-11-18 15:30



  相关主题

决策树、随机森林中的多重共线性问题   3回答

请问针对Adaboost、GBDT等集成学习同一个特征是否可以入模多次?   1回答

决策树可以做多元分类吗?   1回答

决策树的深度和数据特征个数的关系   1回答

Extra Tree算法   1回答

Gradient tree boosting和random forest (随机森林) 有什么区别和联系   1回答

python里实现一个简单的决策树   1回答

关于knn算法中kd树的问题   1回答

gbdt为什么需要泰勒公式展开进行节点分裂计算   2回答

python sklean中的决策树是用的哪一种决策树算法?   2回答

决策树算法ID3,C4.5和CART的特点、异同?   3回答

决策树怎么做增量学习或者online学习?   1回答



回答问题时需要注意什么?

我们谢绝在回答前讲“生动”的故事。

我们谢绝“这么简单,你自己想”、“书上有的,你认真看”这类的回答;如果你认为对方的提问方式或者内容不妥,你可以直接忽略该问题,不用进行任何作答,甚至可以对该问题投反对票。

我们谢绝答非所问。

我们谢绝自己不会、硬要回答。

我们感激每一个用户在编写答案时的努力与付出!