如何减少One-hot编码后生成的特征列数量
高基数分类特征One-Hot编码降维方案
针对国籍类高基数分类特征做普通One-Hot编码产生227列的维度膨胀问题,可直接用以下几类方法解决,按需选择即可:
- 先合并稀有类别再做OHE
先统计所有国籍类别的样本量占比,设定合理阈值(比如占总样本比例低于1%的类别),将所有低于阈值的小众国籍统一归为Other分类后再执行One-Hot编码。这类高基数特征里绝大多数类别都是样本量极少的稀有值,合并后通常能把列数压缩到20列以内,信息损失极小。实操提示:如果个别稀有国籍和建模目标的相关性极强,可以单独保留,不用强行并入Other类,避免损失有效信号。
- 替换普通OHE为适配高基数特征的编码方式
- 目标编码(Target Encoding):按交叉验证拆分的折数,用每个国籍类别对应的训练集目标变量均值(分类任务为正样本占比、回归任务为目标均值)作为编码值,整个国籍特征仅输出1列数值,完全无维度膨胀问题,注意不能用全量数据统计编码值,避免数据泄露。
- 频率编码:用每个国籍在数据集中的出现频率作为编码值,同样仅输出1列,适合国籍分布和建模目标存在明显关联的场景。
- 嵌入编码:如果使用神经网络类模型,可以为国籍特征设置维度为5-10的嵌入层,将离散国籍映射为低维稠密向量,维度远低于原始OHE输出。
- OHE后做特征筛选
如果需要保留原始OHE的编码逻辑,可以先用树类模型(随机森林、XGBoost、LightGBM)对全量特征做重要性排序,直接剔除特征重要性为0或极低的OHE列,仅保留对预测目标有贡献的列即可。
内容的提问来源于stack exchange,提问作者Rai Shikoh
相关产品推荐
相关产品推荐

