sklearn流水线拟合正常预测时出现字符串无法转数值ValueError排查
错误原因分析
- 直接原因是预测时调用对象错误:你完成拟合用的是包含预处理+模型的完整流水线
knn_pipe,但执行预测时调用的是流水线内部的KNeighborsClassifier实例knn,跳过了前置的特征预处理流程。 - 原始测试集
X_test中包含分类字符串特征(比如color列的取值'G'),没有经过ColumnTransformer中的OneHotEncoder转换为数值格式,直接送入要求数值输入的KNN模型,就触发了类型转换报错。 - 拟合环节正常的原因是调用
knn_pipe.fit()时,流水线会自动按顺序执行预处理、模型拟合两步,所有特征都被正确转换为数值后才送入模型,因此不会报错。 - 你之前调整目标列编码的操作无效,是因为sklearn分类模型本身支持字符串类型的标签输入,错误根源和目标列无关。
修复方案
只需要把预测行的调用对象改为完整流水线即可:
# 错误写法 # preds = knn.predict(X_test) # 正确写法 preds = knn_pipe.predict(X_test)
内容的提问来源于stack exchange,提问作者Bex T.
相关产品推荐
相关产品推荐

