当训练和测试数据产生不同的最终特征时如何对它们应用相同的处理管道

How to apply same processing pipeline for train and test data when they result in different final features

我正在尝试创建一个回归模型来预测一些房屋销售,但我在以相同方式处理训练数据和测试数据(这不是从训练集本身获取的验证数据)时遇到了问题.我执行的处理步骤如下:

  1. 删除空值 >50% 的列
  2. 估算包含空值的其余列
  3. 一次性编码分类列

说我的火车数据有以下列(标签提取后)(** ** 中的那些包含空值):

['col1', 'col2', '**col3**', 'col4', '**col5**', 'col6', '**col7**','**col8**', '**col9**', '**col10**', 'col11']

测试数据有以下列:

['col1', '**col2**', 'col3', 'col4', 'col5', 'col6', '**col7**', '**col8**', '**col9**', '**col10**', 'col11']

我只删除那些具有 >50% 空值的列,其余列以粗体显示,我推测。比如说,在火车数据中,我会有:

cols_to_drop= ['**col3**','**col5**','**col7**' ]
cols_to_impute= ['**col8**', '**col9**','**col10**' ]

如果我也保留要从测试数据中删除的相同列,我的测试数据将具有以下内容:

cols_to_drop= ['**col3**','**col5**','**col7**' ]
cols_to_impute= ['**col2**', '**col8**', '**col9**','**col10**' ]

现在的问题是插补,我必须 .fit_transform 我的插补器与训练数据中的 cols_to_impute 并且必须 .transformcols_to_impute 相同的插补器在测试数据中,因为 cols_to_impute 列表中提供的特征数量存在明显差异。 (我也这样做了,但在估算方面遇到了问题)

说,如果我在训练和测试数据集中保持相同的 cols_to_impute 忽略测试数据的空列 **col2**,当谈到单热编码时我遇到了一个问题说 Nan's编码前需要处理。那么,在这种情况下,train和test集应该如何处理呢?我应该将它们连接起来,执行处理并稍后再次拆分它们吗?我在这样做时读到了泄漏问题。

那么,您应该执行以下操作:

  1. 合并 traintest 数据框,然后执行前两个步骤,即删除包含空值的列并对其进行插补。
  2. 然后,拆分回traintest,然后进行一次热编码。

这将确保两个数据帧具有相同的列并且在进行一次热编码时不会泄漏。