处理 LightGBM 模型的缺失值

数据挖掘 机器学习 xgboost lightgbm
2022-02-23 14:01:35

我读过 LightGBM 默认处理缺失值。并且有某些参数可以改变对缺失值的考虑,例如 zero_as_missing 等。我看到有些人在缺失值的地方使用负值(-1、-999)。

所以,我的问题是,哪个更好1)让它模型处理或2)用负值手动替换值?

提前致谢

2个回答

默认行为允许将缺失值发送到拆分的任一分支。替换为小于所有数据的负值会强制(最初)缺失值采用左分支,因此您的模型的容量(略)少。这可能是好事也可能是坏事,取决于你在偏差方差曲线上的位置。

所以,我认为这里最好的答案是“这取决于你的数据”。如果您的缺失值实际上表现得像较小的值,那么将它们编码为大的负数会强制执行这一点,以一种可能有益的方式减少容量。但如果不深入研究探索性数据分析或复杂插补方法 (MICE),我个人会坚持默认行为。

你有两个简单的选择:

  • 删除具有缺失值的示例(我知道并非总是可能的,但只是为了详尽无遗)

  • 使用一个 imputer 即用一个可以最小化噪音的值替换它。你有几个选择:

  1. 均值/中值插补(您可以用此特定特征的均值或中值替换缺失值
  2. 基于集群的插补:这意味着在没有缺失的特征上训练另一个(无监督)模型,并根据学习到的最近的集群分配缺失值