使用不完整数据进行机器学习

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


回答:

处理缺失值的方法

1. 删除法:

删除法分为两种类型:列表删除法和成对删除法。enter image description here

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

  • 在成对删除法中,我们对所有包含感兴趣变量的案例进行分析。该方法的优势是,它保留了尽可能多的案例用于分析。该方法的一个缺点是,它对不同变量使用了不同的样本量。

  • 当缺失数据的性质是“完全随机缺失”时使用删除法,否则非随机的缺失值可能会使模型输出产生偏差。

2. 均值/众数/中位数填补法

填补法是一种用估计值填补缺失值的方法。其目标是利用数据集中有效值的已知关系来帮助估计缺失值。均值/众数/中位数填补法是最常用的方法之一。它包括用该变量的所有已知值的均值或中位数(定量属性)或众数(定性属性)替换给定属性的缺失数据。填补法可以分为两种类型:

  • 一般化填补:在这种情况下,我们计算该变量所有非缺失值的均值或中位数,然后用均值或中位数替换缺失值。如上表中,“Manpower”变量缺失,我们计算所有非缺失值的“Manpower”的平均值(28.33),然后用它替换缺失值。

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

3. 预测模型:

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

  • 模型估计的值通常比真实值表现得更好

  • 如果数据集中没有与缺失值变量相关的属性,那么模型在估计缺失值时将不精确。

4. KNN填补法:

在这种填补方法中,属性的缺失值是通过使用与该属性缺失值最相似的给定数量的属性来填补的。两个属性的相似性是通过距离函数确定的。它也被认为有某些优点和缺点。

优点:

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

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

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

  • 考虑了数据的相关结构

缺点:

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

  • k值的选择非常关键。较高的k值会包括与我们需要的属性显著不同的属性,而较低的k值意味着错过了重要的属性。

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

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注