如何处理 Python 中应该缺失的缺失值(不应插入 NaN)?

Posted

技术标签:

【中文标题】如何处理 Python 中应该缺失的缺失值(不应插入 NaN)?【英文标题】:How to handle missing values in Python that are supposed to be missing (NaNs shouldn't be interpolated)? 【发布时间】:2020-08-22 00:34:23 【问题描述】:

我正在开展一个项目,以根据许多变量来模拟一个人的幸福感变化。

大多数解释变量是每天(他们吃了多少食物、每天运动、睡眠等),但其中一些是每周 - 他们应该是每周,并且对预测变量有一次影响周。

例如,每周变量之一是一个人在每周同一天称体重时的体重变化。

此数据每周仅提供一次,并且会影响人们当天的幸福感。

在这种情况下,有人可以告诉我如何在没有可用于每周变量的数据的日子里处理 python 中的缺失数据吗?

推断缺失天数的数据是错误的,因为人们的幸福感根本不受这些每周变量在不可用天数的影响。

我创建了一个虚拟变量,当每周数据可用时为 1,否则为 0,但我不知道如何处理丢失的数据。我不能离开 NaN,否则 python 不会运行回归,但我不能输入 0,因为有时数据可用当天的实际变量值(例如:体重变化)可能是 0。

【问题讨论】:

【参考方案1】:

SciKit-learn 提供了称为 Imputers 的类,这些类通过遵循用户定义的策略(即使用默认值、使用列的平均值......)来处理缺失值。如果您不想扭曲训练,我建议您使用统计数据而不是任意默认值。

此外,您可以使用MissingIndicator 存储有关哪些值已估算以及哪些值是有机值的信息。

您可以通过SciKit-Learn documentation 中的一些示例代码了解更多关于不同 Imputer 的信息

【讨论】:

感谢 Rayan,正如我在问题中解释的那样,这不是缺失值的经典案例。我不能使用列的平均值或类似的东西,否则模型会在这些输入值和预测变量之间绘制关系。仅每周一次,人们才知道体重变化,因此会影响他们的幸福感。没有其他日子。我昨天在这个问题上找了几个小时,所有为缺失值提供的解决方案——通过对可用数据的插补——都会弄乱我的模型。我也尝试过使用面具,但它并没有用“其他东西”改变 nans。【参考方案2】:

解决此问题的一种方法:

用最后一个值(在本例中为测量重量)填写 NaN

添加一个布尔变量“今天可用的值”(已按照问题中的说明完成)

再添加一个变量:(最后一个可用值/以前的值)*“今天可用的值”。

警告:对线性回归算法进行产品建模可能有点困难。

【讨论】:

以上是关于如何处理 Python 中应该缺失的缺失值(不应插入 NaN)?的主要内容,如果未能解决你的问题,请参考以下文章

使用 seaborn 绘图时如何处理缺失值?

机器学习决策树为什么对缺失值不敏感,如何处理缺失值?

如何处理 Matlab 中 Kruskal-Wallis 测试中的缺失值?

如何处理DataFrame中缺失项

2020-08-05--Pandas-03--缺失值处理

使用python绘制箱线图时如何处理NaN值