使用OneHotEncoder(drop='first')后数据集丢失3个值的原因咨询
解析:OneHotEncoder运行后3个类别消失的原因
问题根源在于你给OneHotEncoder设置了drop="first"参数——这个参数会针对每个指定的分类列,自动删除该列第一个类别对应的编码列。你一共选了3个分类列(Sex、Fasting_Blood_Sugar、Exercise_Angina),每个列删掉一个类别,加起来正好是3个,这就是你看到的“3个值被删除”的现象。
具体场景拆解
假设你的三个分类列都是二元取值(比如Sex为男/女、Fasting_Blood_Sugar为0/1、Exercise_Angina为否/是):
- 处理
Sex时,drop="first"会删掉第一个类别(比如男)的编码列,只保留女对应的编码列 - 处理
Fasting_Blood_Sugar时,删掉第一个类别(比如0)的编码列,只保留1对应的编码列 - 处理
Exercise_Angina时,删掉第一个类别(比如否)的编码列,只保留是对应的编码列
原本每个二元列会生成2个编码列,现在每个列只生成1个,总共减少了3个编码列,对应你观察到的“3个值被删除”。
这个参数的设计目的
drop="first"是用来避免多重共线性的:如果保留所有类别的编码列,列之间会存在线性关联(比如知道某样本不是男,就必然是女),这种关联会干扰线性模型(如线性回归、逻辑回归)的训练效果。删掉一个类别就能打破这种依赖关系。
补充说明
- 若不想删除任何类别,直接移除
drop="first"参数即可,这样每个分类列的所有类别都会生成对应的编码列 - 你可以通过
encoder.get_feature_names_out()查看编码后的列名,能清晰看到哪些类别被保留了
内容的提问来源于stack exchange,提问作者Asra Hussain
相关产品推荐
相关产品推荐

