Python中XGBoost启用enable_categorical=True时采用何种编码方式?
XGBoost启用
enable_categorical=True时的类别特征处理方式 当你在代码里设置enable_categorical=True时,XGBoost采用的不是独热编码、目标编码、标签编码中的任何一种,也不会“智能选择”这些传统编码方式——它用的是自身内置的类别特征最优分裂算法,直接对类别特征进行原生处理。
具体来说:
- 独热编码会把每个类别转成二进制特征,容易造成维度爆炸,XGBoost这里完全不这么做;
- 标签编码给类别分配连续数字,会强行引入无意义的顺序关系,XGBoost也不会用这种方式;
- 目标编码用目标变量的统计值(比如均值)替换类别,存在数据泄露风险,XGBoost同样不依赖这种编码逻辑;
启用enable_categorical=True后,XGBoost会直接识别数据中的类别型特征(比如pandas的Categorical类型列),在树节点分裂时,自动枚举类别特征的所有可能分组方式(把类别分成两个子集),找到能让目标函数(比如你代码里的logloss)下降最多的分裂点。整个过程不需要提前把类别转成数值,是基于类别对预测目标的实际关联来做最优分裂的。
内容的提问来源于stack exchange,提问作者Lorenzo Boletti
相关产品推荐
相关产品推荐

