如何基于已训练的ColumnTransformer获取单一分类变量的OneHot编码值?
解决方法
有两种可行的方式获取单一类别对应的OneHot编码:
方法1:直接提取内部的OneHotEncoder实例
ColumnTransformer中定义的转换器可以直接取出单独使用,无需传入完整的数据集结构:
# 从ColumnTransformer中获取已拟合的OneHotEncoder encoder = ct.named_steps['cat'] # 转换单一类别 blue_encoding = encoder.transform([['blue']]).toarray() print(blue_encoding) # 输出:[[1. 0. 0.]]
说明:named_steps['cat']对应你定义ColumnTransformer时指定的转换器名称(第一个参数'cat'),取出后可直接用它处理单独的类别特征,无需关注原数据的其他列。
方法2:构造符合要求的完整输入结构
如果不想单独提取编码器,可以构造包含所有特征列的输入(其他列用任意占位值即可,我们只需要编码部分的结果):
# 构造包含3列的输入,其他列用0占位 full_input = [[0, 'blue', 0]] # 转换后提取编码部分(前3列) blue_encoding = ct.transform(full_input)[:, :3] print(blue_encoding) # 输出:[['1.0' '0.0' '0.0']]
报错原因说明
你调用ct.transform([['red']])时出错,是因为ColumnTransformer拟合时基于3列的数据集,因此transform要求输入必须和原数据集的特征数量一致(3列),哪怕其他列不会被处理。
内容的提问来源于stack exchange,提问作者Meysam
相关产品推荐
相关产品推荐

