回归任务中pandas.get_dummies设置drop_first=True效果不稳定的原因
关于
pandas.get_dummies中drop_first=True效果差异的解答 核心逻辑:虚拟变量陷阱有明确的适用前提
原帖提到的虚拟变量陷阱问题,仅在无正则化的普通最小二乘(OLS)线性回归场景下是必须解决的硬伤。一旦你使用的模型不是纯OLS,或是带正则项、树类模型这类对多重共线性不敏感的模型,drop_first的收益就不是固定的,会随特征属性、数据分布发生变化。
为什么不同特征设置drop_first=True的效果差异极大
1. 效果更好的场景(对应你测试的MSZoning特征)
- 你使用的是无正则化的OLS线性回归:完美多重共线性会导致OLS参数估计不可逆,结果完全失效,删掉第一列可以直接解决这个问题,效果必然提升
- 分类特征基数低:
MSZoning在对应数据集中只有5个取值,类别分布均匀,被删掉的基准类别样本量足够大、有代表性,模型可以基于基准类别稳定拟合其他类别的差异,不会损失有效信息
2. 效果更差的场景(对应你测试的Neighborhood特征)
- 分类特征是高基数属性:
Neighborhood在对应数据集中有20+个取值,get_dummies默认按列名排序取第一个类别作为基准,若这个基准类别是样本量极少的稀有类别,其他所有类别的参数都是和这个小样本类别做对比,拟合出来的偏差极大 - 你使用的是带正则化的线性模型、树模型、集成模型:这类模型本身不怕轻度多重共线性,反而删掉一列会损失特征的全局信息,正则项会自动惩罚共线性带来的参数波动,保留全哑变量列的拟合效果反而更好
- 数据存在分布偏移:如果测试集出现训练集没有的类别,全哑变量列的全0值本身可以表示「不属于训练集所有已知类别」的隐含信息,删掉第一列之后这个隐含信息就会丢失
适用drop_first=True的特征条件
满足以下所有条件时建议开启:
- 使用的是无正则化的OLS线性回归
- 分类特征的基数低(取值数≤5个)
- 所有类别样本量分布均匀,没有占比低于5%的稀有类别
不满足以上条件时,建议优先保留全部哑变量列,靠模型本身的特性处理共线性问题即可。
内容的提问来源于stack exchange,提问作者DuFei
相关产品推荐
相关产品推荐

