缺少类别的单热编码

lip*_*mar 3 python scikit-learn one-hot-encoding

我有一个带有类别列的数据集。为了使用线性回归,我对这一列进行了 1-hot 编码。

我的集合有 10 列,包括类别列。删除该列并附加 1-hot 编码矩阵后,我最终得到 14 列 (10 - 1 + 5)。

所以我用形状矩阵 (n, 14) 训练(拟合)我的 LinearRegression 模型。

训练之后,我想在训练集的一个子集上测试它,所以我只先取了 5 个,然后将它们放入相同的管道中。但是这 5 个第一个只包含其中的 3 个类别。因此,在通过管道后,我只剩下一个形状为 (n, 13) 的矩阵,因为它缺少 2 个类别。

如何强制 1-hot 编码器使用 5 个类别?

我正在使用 sklearn 的 LabelBinarizer。

lip*_*mar 6

错误是“将测试数据通过同一管道”。基本上我在做:

data_prepared = full_pipeline.fit_transform(train_set)

lin_reg = LinearRegression()
lin_reg.fit(data_prepared, labels)

some_data = train_set.iloc[:5]
some_data_prepared = full_pipeline.fit_transform(some_data)

lin_reg.predict(some_data_prepared)
# => error because mismatching shapes
Run Code Online (Sandbox Code Playgroud)

有问题的线路是:

some_data_prepared = full_pipeline.fit_transform(some_data)
Run Code Online (Sandbox Code Playgroud)

通过这样做fit_transform,我将使 LabelBinarizer 适合仅包含 3 个标签的集合。相反,我应该这样做:

some_data_prepared = full_pipeline.transform(some_data)
Run Code Online (Sandbox Code Playgroud)

通过这种方式,我使用由全套 ( train_set)拟合的管道并以相同的方式对其进行转换。

谢谢@Vivek Kumar