你应该尝试所有的:
使用可以处理缺失数据的分类器。决策树可以处理输入和输出中缺失的特征。Try xgboost,这对 kaggle 比赛的获胜者很有帮助。看到这个答案。
现成的插补程序
编写您自己的自定义插补例程(此选项可能会让您获得最佳性能)
给定您的缺失值模式,将问题分成四个部分并为每个部分学习分类器。
用于插补的自定义例程
让我们将您的列集称为 A、B、C 和 D。
查看MICE的这个解释,它似乎受益于缺失值的随机模式。在您的情况下,链式方程只会采用一种方式,并且像 MICE 中的重复迭代可能无济于事。但是您的缺失值的高度规则性可能会使您自己的 MICE 变体更容易实现。
使用集合 A 中的行来填充 B。您可以将其写为矩阵问题XW=Z,X是填充的行A∩B,Z是填充的行A−B. 这两组不相交,因为B⊆A,这涵盖了所有行。学习W, 交叉验证并用它来估算 B.
使用 A 和 B 估算 C。
- 你在 A 上双标,但我认为这不是一个整体的问题。A中的任何错误都会对结果产生双倍的影响。
- 使用 A,B,C 估算 D。
使用估算值与 A、B、C、D 一起学习。与 MICE 不同,您的误差不会对所有估算值都相等,因此您可能希望通过使用具有不同权重的四个数据集来抵消 A 引起的误差。“带有 A 的行都是原始数据,因此它的权重更高”。“带有 B 的行会受到少量惩罚,因为我的数据较少。”
这四个权重将由另一个“堆叠”分类器学习,类似于下一节。
堆叠分类器
插补的一个可能缺点是插补可能不准确,最终在不同的数据点上会有不同的错误。所以,跳过插补,只做预测。
不是按照填充最多到填充最少的顺序对列进行排序,而是按以下顺序对行(即数据点)进行排序:最多列到最少列。
然后你有四组数据。为每个分类器训练一个分类器,一个使用所有数据但使用较少特征的分类器,然后一个使用更多特征但较少数据的分类器,直到最后一个使用最多特征但使用最少数据的分类器。哪个是最好的?更多数据或更多功能。这是基于您的数据集的经验答案
得到四个分类器后,将它们与顶部的另一个线性分类器(“堆叠”分类器)结合起来。它可能决定给具有最多特征的分类器或具有最多数据的分类器赋予更多权重,我们将看到(我打赌大多数数据)。但是,您正在以最佳方式使用所有功能和所有数据。我认为这至少应该是一个合理的基线。
您也可以尝试链接它们,从使用(最少数据,最多功能)的最后一个分类器开始。下一个分类器使用更多的数据但更少的特征。对于某些(常见)数据,它有一个新特征,如果数据点是“新的”,则为 0,并且y0如果它来自旧集。
有三种集成方法,Bagging 随机采样较少的数据来训练分类器(有助于处理非常嘈杂的数据并提供较低的方差),随机森林等方法随机丢弃列,以及提升哪些链学习。您预测值(使用任何东西,包括 Bagging 和随机森林),然后训练另一个模型(上述类型)来预测残差等等。
您可以查找这些文献,但老实说,这四个分类器(最大数据,最小特征),...,(最小数据,最大特征)可以使用任何库轻松生成。然后使用集成学习技术链接或堆叠分类器。