数据不完整的机器学习

Machine learning with incomplete data

我有一百万个样本,大约有 1000 个特征。但是,每个样本只测量了一部分特征。我想根据特征进行机器学习来预测结果,但是我不知道如何处理丢失的数据。由于数据以随机顺序缺失,我无法 class 根据缺失的特征验证数据,因为 class 的数量会很大,每个 class 中只有很少的样本。处理此类问题的最佳解决方案是什么?

处理缺失值的方法

1.删除:

它有两种类型:List Wise Deletion和Pair Wise Deletion。

  • 在列表删除中,我们删除观察值,其中任何 缺少变量。简单是它的主要优点之一 方法,但是这种方法降低了模型的能力,因为它减少了 样本量。

  • 在成对删除中,我们对所有情况进行分析 存在感兴趣的变量。这种方法的优点是, 它保留尽可能多的案例以供分析。中的一个 这种方法的缺点是,它使用不同的样本量 不同的变量。

  • 缺失数据的性质为“缺失”时使用删除方法 完全随机”否则非随机缺失值会使 模型输出。

2。均值/众数/中位数插补

插补是一种用估计值填充缺失值的方法。 objective是利用数据集有效值中可以识别的已知关系来辅助估计缺失值。均值/众数/中位数插补是最常用的方法之一。它包括用该变量所有已知值的平均值或中位数(定量属性)或模式(定性属性)替换给定属性的缺失数据。它可以有两种类型:-

  • 广义插补:在这种情况下,我们计算均值或中位数 对于该变量的所有非缺失值,然后替换缺失值 具有均值或中位数的值。如上table,变量“Manpower” 缺失,所以我们取“Manpower”的所有非缺失值的平均值 (28.33) 然后用它替换缺失值。

  • 相似案例插补:在这种情况下,我们计算平均值 性别“男”(29.75)和“女”(25)分别为非缺失 然后根据性别替换缺失值。对于“男”,我们 将用 29.75 和“女性”替换人力的缺失值 25.

3。预测模型:

预测模型是处理缺失数据的复杂方法之一。在这里,我们创建了一个预测模型来估计将替代缺失数据的值。在这种情况下,我们将数据集分为两组:一组没有变量缺失值,另一组有缺失值。第一个数据集成为模型的训练数据集,而第二个具有缺失值的数据集是测试数据集,具有缺失值的变量被视为目标变量。接下来,我们创建一个模型来根据训练数据集的其他属性预测目标变量并填充测试数据的缺失值 set.We 可以使用回归、方差分析、逻辑回归和各种建模技术来执行此操作。这种方法有两个缺点:

  • 模型估计值通常比 真值

  • 如果与数据集中的属性没有关系,并且 具有缺失值的属性,则模型将不精确 估计缺失值。

4. KNN 插补:

在此插补方法中,使用与缺失值的属性最相似的给定数量的属性来插补属性的缺失值。使用距离函数确定两个属性的相似性。它也有一定的优点和缺点。

优点:

  • k-最近邻可以预测定性和定量 属性

  • 为具有缺失数据的每个属性创建预测模型是 不需要

  • 多个缺失值的属性可以轻松处理

  • 考虑了数据的相关结构

缺点:

  • KNN算法在分析大型数据库时非常耗时。它 搜索所有数据集寻找最相似的 实例。

  • k值的选择很关键。较高的 k 值将包括 与我们需要的明显不同的属性 而较低的 k 值意味着遗漏了重要的 属性.

来源:https://www.analyticsvidhya.com/blog/2016/01/guide-data-exploration/

您的问题是机器学习数据分析中的一个常见案例。虽然很难说出如何准确地解决您的问题 - 在不知道数据、您想要预测的内容或您正在考虑的模型(例如生成或判别)的情况下 - 我会尝试给您一些指示。

参考资料

首先,一些参考资料:我找到了(Benjamin Marlin 的博士论文](http://www.cs.ubc.ca/~bmarlin/research/phd_thesis/marlin-phd-thesis.pdf) to be a good place to start. I haven't read the full PhD thesis but came across it a couple. It might be useful to give you a quick start on the matter. There is also a book on "Statistical Analysis with Missing Data" by Little and Rubin that might be useful for you. There is a vast body of ltierature on the topic, this review may help you to get an overview: A Review of Methods for Missing Data (the review exemplarily discusses a research study for regarding asthma symptoms, but the approaches may still be useful to you). Beneath the literature, there is also a Wikipedia page on Missing Data 这可能会提供一些基本的见解。

总结

一些简单的入门方法:

  • 确定缺失数据的类型(这对于选择上述参考文献中讨论的方法可能至关重要):
    • 完全随机缺失 (MCAR):缺失特征的概率完全独立于任何可观察或不可观察的变量。
    • 随机缺失 (MAR):缺失特征的概率取决于可观察或不可观察变量(即其他可观察或不可观察变量 "explain" 缺失特征)。
    • 非随机缺失 (MNAR) - 根据您的描述,这可能不适合您。
  • 确定数据丢失的原因;这也将帮助您识别缺失数据的类型,例如MCAR 和 MAR 之间的区别,以及处理缺失数据的适当方法。
    • 首先是数据不可用吗(假设 classification class 有 2 个 classes,有些特征对其中一个 classes)
    • 数据是否可用但未记录(例如传感器故障,或研究参与者未填写字段)
    • 是否记录了数据但在 pre/processing 期间丢失了(例如,传感器记录了 max/min 值、NaN 值或类似的值,这些值在预处理中被丢弃,或者由于匿名化而被丢弃的字段研究)
    • ...
  • 处理缺失数据(这里只介绍一些简单的方法):
    • 忽略缺失数据(例如忽略特征);当然,如果所有行都没有特征,这对于 MCAR 来说可能会很困难。
    • 填写缺失数据:
      • 使用默认值(例如,如果 stdy 中的字段没有被所有参与者填写,则用平均值或一些默认值,或一些表明它缺失的值来填充它——字段缺失的信息也可能对机器学习很有用,例如对于 MAR 案例)。
      • 猜测值
      • 推断值(例如,通过可能使用简单方法(例如 k-NN 或更复杂的方法)的插补技术)
        • 插值可能是这里的特例...
      • 转换数据(例如降维、随机项目等;这当然使用分类数据更困难)
    • ...

总的来说,有很多有效的方法,这在很大程度上取决于您的 task/application。不过,首先要确定数据丢失的原因以及丢失的数据。然后,按照一些参考资料开始尝试简单的方法,看看哪种方法适合您。