哪些模型可以处理空值?

数据挖掘 决策树 机器学习模型 梯度下降
2021-09-23 03:43:41

不幸的是,尝试在机器学习中搜索或研究空值总是会打开页面,试图教你如何估算值,但我正在尝试找到可以处理空值作为输入的模型。我目前发现的唯一一个是 XGBoost,它是一种梯度下降算法。我相信基于树的算法理论上也应该处理空值,但我不确定这是否适用于所有基于树的算法,或者某些算法是否比其他算法更好。

一些背景知识,我创建了多个数据集,包括替换了 NaN 的数据集。这些可用于训练无法处理空值的模型,例如神经网络。

由于数据的稀疏性和性质,使用均值或中值进行估算会引入很多偏差并且没有意义。只是想把它拿出来,因为这是每个人都建议的第一件事。此外,丢失的数据实际上代表了患者没有完成特定实验室测试的情况,这本身就是有用的信息。

那么回到最初的问题,除了 XGBoost,还有其他模型可以处理空值作为输入吗?这是否可以推广到所有梯度下降算法或树算法或仅适用于特定算法?对于要保留空值的情况,是否有首选模型?

3个回答

LightGBMXGBoost库可以处理缺失值

  • LightGBM:将在拆分过程中忽略缺失值,然后将它们分配给减少损失最多的一方
  • XGBoost:实例被分类为默认方向(最佳默认方向以某种方式从数据中学习)

最后,它不是梯度下降算法或树算法的一般属性。只有这些算法的特定实现具有此属性。

就个人而言,我相信LightGBM并且XGBoost可以有效地处理缺失值,以防万一想要保留它们

LightGBM默认情况下,通过将 null 值设置为零来处理它们。您还可以通过设置假设零为空值zero_as_missing=true因此,虽然它在后端处理它们,但它不会对你用零进行任何不同的处理。

这是文档:https ://lightgbm.readthedocs.io/en/latest/Advanced-Topics.html

就个人而言,我更喜欢控制我的 null 的处理方式,因此我通常不使用此功能。

看起来您也可以让它忽略缺失值,但您必须将其明确设置为选项:use_missing=false. 我没试过这个。

在使用基于树的算法时,我经常做的一件事是将空值设置为在非空数据集中不可能的值,例如 -1 表示应该始终为正的值。这充当空标志,而不是将空值视为零。你必须小心你如何做到这一点。

我会测试一系列选项,看看哪个选项产生的预测模型最高——您可能会发现使用均值或中位数进行插补对您的数据集来说是最好的选择。

由于您要询问哪些软件包,因此H2o GBMRpartR gbm也会处理缺失。通过代理变量、另一个类别、3-way split(左、右、缺失)等不同方式。

您还应该问,如果在评分过程中缺少一个在训练期间没有丢失的特征怎么办——如何处理?仅在培训期间处理失踪可能无法涵盖所有​​情况。

无论如何,您可能还想使用指示变量。有时,信号存在于某物与无物之中,而不是很多值而什么都没有。有一种观点认为,树木足够聪明,可以通过在数据中使用标志来找到信号(如果它丢失了)而不是其他所有信号,但我已经多次看到相反的情况。特别是正如您提到的,数据稀疏,患者是否接受测试可能存在信号。所以明确一点,给算法一个更好的机会。