我正在准备数据,以便让我的数据适合机器学习算法。目前,我正在处理/处理缺失值。在下面显示的这段代码中,我没有遇到错误,而是感到困惑。在这两个代码块中,我应用了相同的东西,但用于两个不同的数据集:train_x_e => train set 和 test_x => test set。在第一个代码块中,我填充了 train_x_e
中的 nan 值,这完全没问题。但是,在 test_x
中,我不确定是否应该使用 train_x_e
或 test_x
填充 nan 值,如第二个代码所示。
如果有人能向我解释这一点,我将不胜感激!
检查键的值是否大于 0,以便我们可以将其存储在 nan_columns 中
火车集
nan_columns = []
for keys, values in null_vals.items():
if values > 0:
nan_columns.append(keys)
train_x_b = train_x_e.fillna(train_x_e.median())
print(nan_columns)
测试集的相同过程
测试集
nan_columns = []
for keys, values in null_vals.items():
if values > 0:
nan_columns.append(keys)
test_x_b = test_x.fillna(test_x.median())
print(nan_columns)
最佳答案
你这样做的方式是正确的。您应该始终将训练数据和测试数据分开。您在传入数据上测试您的模型,因此只能使用从中得出的信息。
在测试时使用训练数据的中值并不像在训练中使用测试数据那么糟糕,但请注意,这两个数据集准备数据的过程是不同的。在第一个中,使用相同数据集的中值,在第二个中使用与测试数据集无关的值。
此外,在使用训练集中位数时,您必须将其与模型一起保存在某个地方。如果你有 1000 个特征怎么办?您必须保存 1000 个值。如果您想要一个迭代模型,您是否也更新这些值呢?
用另一个数据集弄脏一个数据集的现象称为 data leakage .
关于python - 用测试集中的中位数填充 Nan 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59378908/