我正在尝试创建一个回归模型来预测一些房屋销售情况,但在处理训练数据和测试数据(这不是从训练集本身提取的验证数据)时遇到了一些问题。我进行处理的步骤如下:
- 删除空值超过50%的列
- 对其余包含空值的列进行填补
- 对分类列进行独热编码
假设我的训练数据在标签提取后具有以下列(粗体中的列包含空值):
['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**' ]
现在的问题出现在填补过程中,我需要在训练数据的cols_to_impute
上使用.fit_transform
来调整我的填补器,并且需要在测试数据的cols_to_impute
上使用相同的填补器进行.transform
,因为在这两个cols_to_impute
列表中提供的特征数量明显不同。(我也这样做了,并且在填补过程中遇到了问题)
假设,如果我在训练和测试数据集中保留相同的cols_to_impute
,忽略测试数据中的空值列**col2**
,当进行独热编码时,我遇到了一个问题,提示在编码前需要处理Nan's
。那么,在这种情况下,训练集和测试集的处理应该如何进行?我应该将它们连接起来,进行处理,然后再分开吗?我读到这样做会导致泄漏问题。
回答:
嗯,你应该这样做:
- 将
train
和test
数据框合并,然后进行前两个步骤,即删除含有空值的列并填补它们。 - 然后,再次将其分成
train
和test
,然后进行独热编码。
这样可以确保两个数据框具有相同的列,并且在进行独热编码时不会出现泄漏问题。