scikit-learn接收的one-hot编码特征应采用何种格式?
scikit-learn one-hot编码输入问题解答
输入格式选择
- 必须使用独立0/1列的输入形式,也就是
pandas.get_dummies()输出的多列格式,绝对不能传入合并为逗号分隔值的单列数据。
scikit-learn所有常规监督模型都会将输入的每一列识别为一个独立特征,单列的合并编码不管是字符串格式还是列表格式,都无法被模型正确识别为三个独立的分类特征,要么直接报错,要么得到完全错误的计算结果。你给出的a/b/c三列0/1值的输入格式是正确的,转成DataFrame或者numpy数组输入都可以。
特征类型标注问题
你不需要额外告知scikit-learn这些列是one-hot编码后的分类特征:
- 线性模型会自动为每个0/1列计算独立权重,正好对应每个分类取值的贡献,符合one-hot的设计逻辑
- 树模型会将每列的0/1作为切分阈值,正好对应是否选中该分类取值的判断,和原生处理分类特征的逻辑一致
如果后续你不想手动做one-hot编码,也可以使用scikit-learn自带的sklearn.preprocessing.OneHotEncoder做编码,能自动解决训练集、测试集的分类取值对齐问题,比直接用pandas.get_dummies()更适合工业级建模流程。
内容的提问来源于stack exchange,提问作者MehmedB
相关产品推荐
相关产品推荐

