输入包含 NaN、无穷大或对于 dtype('float32') 来说太大的值。不破坏数据集

数据挖掘 机器学习 Python 神经网络
2021-09-21 18:48:20

我有一个全部为二进制的数据表,但有时会丢失一些案例。在其中一个输入中,有一个空白,我不想完全删除整个列,因为某些行具有可能有用的值。

示例:第 9 列包含除第 15 行(随机行)为空白的所有数据。如何在不必删除整个列或使数据变坏(通过平均)的情况下做出决策树。

我不确定这种情况下的平均是否会加强数据,因为它可能与不同的输出相关。

3个回答

如果 NaN 不是太频繁,您可以尝试删除包含它的行。

否则,如果您的算法无法处理 NaN(即 lightgbm 也是基于树的算法可以),您必须以某种方式填充这些值。通常使用超出正常值范围的值是一个好主意(例如 -99 表示只有正值的变量),因此树可以学会以不同的方式处理这些值。

在您使用二进制(0/1)数据的情况下,它有点不同。我会放 0.5,因此模型可以通过一次切割来学习将缺失值放入任一组(0 或 1),具体取决于哪个更有意义。如果所有 3 组都非常不同,请不要担心模型也应该能够学习它,因为您有足够的数据让树进行另一次切割。

使用多重插补。这个想法是,您可以将具有缺失值的列视为目标,其中您有许多输出(训练+验证数据)的值,而您没有一些(要预测的测试数据)的值。然后,您根据具有其价值的那些 rwo 训练模型,并使用它来预测缺失值。你可以看看这里

您还可以创建一个新列来确定该特定功能是否缺失。

例子:

您有特征 I,其中除行 J 之外的所有行都有值。然后您可以创建特征 I_na,其中行 J 的值为 1,但对于其他每一行,它将为 0。