LightGBM类别特征编码方式及树节点类别与数字对应关系咨询
LightGBM类别特征编码与映射关系查询
1. LightGBM对类别特征的编码方式
LightGBM针对类别特征采用直方图优化的类别特征编码,核心逻辑如下:
- 直接复用
category类型的整数编码:当你以pandas的category格式传入特征时,LightGBM会直接使用该特征自带的cat.codes整数编码,无需额外做LabelEncoder这类预处理。 - 基于梯度统计的类别分裂:不同于数值特征的阈值分割,LightGBM会统计每个类别对应的梯度和Hessian值,找出最优的类别子集分割方式(比如把部分类别归为左子树,剩余归为右子树),避免One-Hot编码导致的维度膨胀问题。
- 树结构中的类别分裂标识:当树节点的
decision_type为==时,threshold字段的字符串(如3||4||8)代表被分到对应子树的类别编码集合。
2. 查找类别特征数字编码与原始类别的对应关系
你可以通过两种方式获取映射关系:
- 从原始数据的
category列直接提取:
假设类别特征列名为target_cat_feature,执行以下代码即可得到编码与原始类别的映射:
比如# 获取所有原始类别 original_cats = df['target_cat_feature'].cat.categories # 构建编码到类别的字典 code_to_cat = {code: cat for code, cat in enumerate(original_cats)}code_to_cat[3]就能得到编码为3对应的原始类别。 - 通过训练好的模型反查特征:
先通过model.feature_name()找到split_feature:41对应的特征列名,再回到原始数据中查询该列的category编码映射即可。
内容的提问来源于stack exchange,提问作者Марина Толмашова
相关产品推荐
相关产品推荐

