如何使用 SKLEARN 管道

数据挖掘 机器学习 scikit-学习
2022-02-18 16:18:50

我有一个关于使用 sklearn 管道预测/分类数据的问题。我了解如何构建管道,使用训练数据对其进行训练,使用测试数据对其进行测试;但在那之后我迷路了。如何使用管道来预测新/未见数据的值?

我构建了一个管道,它用 a 转换分类数据,OneHotEncoder另一个通过用 a 缩放列来转换数值数据StandardScaler然后我习惯FeatureUnion将两个管道组合起来,DecisionTreeClassifier()最后加入 a ,对数据进行分类。我成功地拟合了训练数据pipeline.fit(X_train,y_train),然后用 预测pipeline.predict(X_test)这一切都很好。

接下来我想使用管道来预测新/未见数据的分类;但是当我打电话时,pipeline.predict(X_unseen)我得到一个ValueError. 该错误与数据的分类特征之一有关,即城市名称。管道似乎没有转换看不见的数据。

阅读有关管道的文档和几个示例,我了解何时.fit()调用.predict数据将通过整个管道传递。如果我的理解是正确的,那么pipeline.predict(X_unseen)应该通过管道传递新数据,对其进行转换然后对其进行分类。然而,情况似乎并非如此。谁能告诉我我遗漏了什么或误解了什么?如何使用我构建的管道来预测新数据?

1个回答

你能分享一下代码吗?没有代码很难调试

当您执行 pipeline.predict 时,它会在所有步骤中使用 transform 方法。

可能是在 One Hot Encoding 中您没有指定如何处理未知数。

from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder(handle_unknown='ignore')