【问题标题】:Filling Nan values with median in a test set在测试集中用中位数填充 Nan 值
【发布时间】:2020-04-10 05:33:59
【问题描述】:

我正在执行数据准备,以使我的数据适合机器学习算法。目前,我正在处理/处理缺失值。在下面显示的这段代码中,我没有遇到错误,而是感到困惑。在这两个代码块中,我应用了相同的东西,但用于两个不同的数据集:train_x_e => train settest_x => test set。在第一个代码块中,我正在填充 train_x_e 中的 nan 值,这完全没问题。但是,在test_x 中,我不确定是否应该使用train_x_etest_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)

【问题讨论】:

  • 不清楚你想要完成什么
  • @Descartes 我只是有一个困惑,使用训练集填充测试集的缺失值和使用测试集数据填充测试集的值有什么区别设置自己!

标签: python python-3.x pandas machine-learning missing-data


【解决方案1】:

你的做法是正确的。您应该始终将训练和测试数据分开。您正在根据传入数据测试模型,因此只能使用从中派生的信息。

在测试时使用训练数据的中位数并不像在训练中使用测试数据那么糟糕,但请注意,这两个数据集准备数据的过程是不同的。第一个使用相同数据集的中位数,第二个使用与测试数据集无关的值。

此外,当使用训练集中位数时,您必须将其与模型一起保存在某个地方。如果你有 1000 个特征怎么办?您必须保存 1000 个值。如果您想要一个迭代模型,是否也要更新这些值?

一个数据集被另一个数据集弄脏的现象称为data leakage

【讨论】:

  • 感谢您的回答,我对 ML 有点陌生,我不太了解您所说的将其保存在某处的第三部分。你的意思是我将它分配到一个新的火车/test_x_b的方式,是正确的保存方式还是你在谈论别的东西。再次感谢!@Andronicus
  • @Unix 这意味着当您将模型投入生产并且有新数据出现时,您需要从某个地方获取这些中位数,因此您必须事先在训练数据集上计算它们。此外,如果您使用新数据更新模型,您还必须更新中位数。
  • @Unix 没问题,祝你有美好的一天,圣诞快乐;)
猜你喜欢
  • 2019-08-14
  • 1970-01-01
  • 1970-01-01
  • 2022-10-13
  • 2017-04-28
  • 1970-01-01
  • 1970-01-01
  • 2016-06-05
  • 1970-01-01
相关资源
最近更新 更多