sklearn使用ColumnTransformer构建Pipeline时报指定列不存在错误如何解决
错误根源
你对数据集的特征、标签拆分逻辑和预处理逻辑不匹配:
你使用的鸟类骨骼数据集中,type是分类任务的目标标签列,你已经通过y = data1.iloc[:,11:12]将它拆分到了标签集合,输入特征矩阵x中完全不包含type列。但你在ColumnTransformer中错误将type配置为需要编码的输入特征列,程序在x中找不到对应列就触发了报错。
修复步骤
- 调整特征、标签拆分逻辑,用列名提取更清晰避免索引错误:
# 输入特征为10个骨骼数值列 x = data1[['huml','humw','ulnal','ulnaw','feml','femw','tibl','tibw','tarl','tarw']] # 预测标签为type列 y = data1['type']
- 删除预处理逻辑中针对
type列的分类特征处理配置,type是标签不属于输入特征,不需要参与特征预处理:
numeric_features = ['huml','humw','ulnal','ulnaw','feml','femw','tibl','tibw','tarl','tarw'] numeric_transformer = Pipeline(steps=[ ('imputer', SimpleImputer(strategy='mean')), ('scaler', StandardScaler()) ]) preprocessor = ColumnTransformer( transformers=[ ('num', numeric_transformer, numeric_features) ] )
- 其余代码保持不变,训练时如果出现标签维度报错,可将y转为一维数组:
pipeline_lr.fit(x_train, y_train.values.ravel())
训练完成后可直接用以下代码验证模型效果:
print("模型测试集准确率:", pipeline_lr.score(x_test, y_test))
内容的提问来源于stack exchange,提问作者Archana Jalaja Surendran
相关产品推荐
相关产品推荐

