拆分数据集后分别对训练集、测试集执行编码的操作是否正确?
问题排查结论
你的处理流程存在操作错误,核心问题出在测试集的特征编码环节。
具体错误原因
- 你对测试集调用了
ct.fit_transform(X_test),这是典型的数据泄露+特征不匹配问题:
你在训练集上调用fit_transform()时,ColumnTransformer已经基于训练集的State特征取值学习到了固定的独热编码映射规则,这是后续线性回归模型训练时依赖的特征基准。如果测试集重新执行fit()操作,编码器会基于测试集里的State取值重新生成编码规则,最终编码得到的特征维度、每个维度对应的含义都会和训练集的编码结果不一致,模型用训练集特征学习到的参数完全无法适配测试集的新编码特征,预测结果必然失效。 - 你提前设置的
handle_unknown='ignore'参数刚好适配测试集的编码需求:当测试集里出现训练集没见过的State取值时,编码器会自动把对应独热特征全部置为0,符合预期的处理逻辑,不需要重新拟合编码器。
修正方案
仅修改测试集的编码代码即可,无需重新拟合编码器:
# 修正后代码:直接调用transform,复用训练集学习到的编码规则 encoded_X_test = ct.transform(X_test) y_pred = regressor.predict(encoded_X_test)
内容的提问来源于stack exchange,提问作者Hashi
相关产品推荐
相关产品推荐

