以与用于训练 RF 模型的编码数据相同的格式编码新数据

Encoding new data in the same format that encoded data used for training RF model

我有一个包含数值和分类数据的数据集。我使用单热编码分别对列进行了缩放和编码。我用这些数据训练了一个随机森林模型。在使用我的测试数据获得良好结果后,我想使用该模型来预测新数据的结果。问题是我不知道如何有效地将我的分类数据转换为用于训练和测试数据的相同编码。我使用了相同的编码器,但没有使用 9 列数组,我只为一个新数据点获得了 3 列。

我已经尝试使用相同的编码器,但我没有得到相同数量的列。

categorical_columns=[['Product1','Segment1','Yes'],['Product1','Segment1','No'],
                    ['Product3','Segment2','No'],['Product2','Segment1','Yes'],
                    ['Product5','Segment2','No'],['Product4','Segment1','No'],
                    ['Product4','Segment1','Yes'],['Product1','Segment2','Yes']]
df=pd.DataFrame(categorical_columns,columns=['Product_Type','Segment','Special_Feature'])

from sklearn.preprocessing import OneHotEncoder
encoder=OneHotEncoder(categories = "auto", handle_unknown = "ignore",sparse=False)
ohe=encoder.fit_transform(df)

new_categorical_data=np.array([['Product3','Segment1','Yes']])
ohe_new=encoder.fit_transform(new_categorical_data)

我期望一个像这样的数组:[[0,0,1,0,0,1,0,0,]] 我得到一个像这样的数组 [[1,1,1]]

你快到了。只需将最后一行换成:

ohe_new = encoder.transform(new_categorical_data)  # not fit_transform

否则 encoder 会忘记它之前在第一个 fit_transform 中看到的内容。