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。
错误是“将测试数据通过同一管道”。基本上我在做:
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)拟合的管道并以相同的方式对其进行转换。
| 归档时间: |
|
| 查看次数: |
1940 次 |
| 最近记录: |