管道生产oneHotEncoding

时间:2019-12-06 21:25:57

标签: machine-learning scikit-learn pipeline

我正在尝试使训练自动化,预测过程。 但是我有一个热编码问题。

假设我有一列看起来像这样:

column /
a      /
b      /
c      /

如果我对它进行编码,则每个字母将得到3列,但是如果稍后下载一些新数据后,在同一列中我只有a和b,则不会创建名为“ column_c”的列所以由于形状我无法预测使用模型,所以我将有2列而不是3列。

我该如何解决?

谢谢

1 个答案:

答案 0 :(得分:0)

您描述的错误仅在重新培训OneHotEncoder时才会发生,而您不应在自动化过程中这样做。您应该像在训练数据集上对任何其他ML模型一样对OneHotEncoder进行训练,然后将此训练有素的编码器应用于要通过自动管道提供的任何新数据。

示例:

import pandas as pd
from sklearn.preprocessing import OneHotEncoder

df1 = pd.DataFrame({"cat_col":["a","b","c"]})
df2 = pd.DataFrame({"cat_col":["a","b"]})

ohe = OneHotEncoder(handle_unknown="ignore")

print(ohe.fit_transform(df1).toarray())
print(ohe.transform(df2).toarray())

这将返回

[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
[[1. 0. 0.]
 [0. 1. 0.]]