解决数据遇到缺失值(NAN)问题


在做大数据分析,特别是图像识别或者重构时,发现了一个可以破坏每个数据分析过程的障碍。这个障碍被称为数据科学和机器学习中的NaN值。在现实世界的数据中,有一些情况下,由于各种原因,例如,损坏的数据,未能加载信息,或不完整的提取,导致一个特定的元素不存在。处理这种缺失值是机器学习和数据分析面临的最大挑战之一,因为对如何处理缺失值做出正确的决定会产生强大的数据模型。

NAN概述

什么是NaN值?

NaN或Not a Number是DataFrame和numpy数组中的特殊值,表示单元格中缺少数值。在编程语言中,它们也被表示出来,例如在Python中它们被表示为np.NAN值。

你可能认为None(或NaN)值只是零,因为它们代表没有一个值。但这里有一个陷阱,零值和无值之间的区别是,零是一个值(例如整数或浮点数),而无值代表没有这个值。

NaN值是怎样的危险?

NaN值在两个方面是危险的。

  • 改变一些指标的平均值或中位数值,因此给科学家带来错误的信息。
  • sklearn实现的算法不能在有这种值的数据集上执行。

如何处理它们?

NaN值的处理方法。

  • 擦除有NaN值的行。但这不是一个好的选择,因为这样我们就会失去信息,特别是当我们在处理小数据集时。

  • 用特定的方法或数值来估算NaN值。下面将讲述到这个方法。

    1. 用特定的值来输入它们。
    2. 用特殊的指标进行估算,例如,平均值或中位数。
    3. 使用一种方法进行估算。MICE或KNN。

测试!

处理方法

方法1: 直接删除

这种方法通常用于处理空值。在这里,如果某一行的某个特征有空值,我们就删除它;如果某一列的缺失值超过70-75%,我们就删除它。只有当数据集中有足够多的样本时,才建议使用这种方法。我们必须确保在我们删除数据后,没有增加偏差。删除数据会导致信息的损失,在预测输出的时候不会得到预期的结果。
优点:

  • 完全删除有缺失值的数据会产生稳健和高度准确的模型。
  • 删除没有具体信息的某一行或某一列会更好,因为它的权重不高。

缺点:

  • 信息和数据的丢失
  • 如果缺失值的比例很高(比如30%),与整个数据集相比,效果很差。

方法2. 用0/平均值/中位数替换

我们可以计算出特征的平均数、中位数或模式,然后用缺失的值来替换它。

  • 在这种方法中,NaN值被改变为一个特定的值(例如一个数字),在不少情况下,这是0。
  • 平均值是一个系列中一个值的总和除以一个系列所有值的数量。它是统计学中最常用的指标类型之一。但是,为什么我们要用均值来归纳NaN值呢?平均值有一个非常有趣的特性,如果你在你的系列中增加一些平均值,它不会改变。
  • 中位数将数字分成两半,样本数量相等。有时在统计分析中,中位数比平均值更有信息量,因为它没有那么多的新值偏斜。在正态分布中(实际上并不存在),均值和中位数的数值是相等的。

这是一个近似值,可以增加数据集的差异。但是,数据的损失可以被这种方法所否定,与删除行和列相比,它可以产生更好的结果。用上述三种近似方法代替是一种处理缺失值的统计方法。这种方法也被称为训练时泄露数据。
优点:

  • 当数据规模较小时,这是一个更好的方法。
  • 它可以防止数据丢失而导致行和列的删除。

缺点:

  • 代入的近似值会增加方差和偏差
  • 与其他多重估算方法相比,效果很差

方法3. 指定一个独特的类别

这个方法主要针对分类问题。一个分类特征会有一定数量的可能性。由于它们有一定数量,我们可以为缺失的值指定另一个类别。这个策略将为数据集增加更多的信息,从而改变方差。
优点:

  • 由于多了一个类别,可能性就少了,导致在一次热编码后的低方差–因为它是分类的。
  • 通过增加一个独特的类别来抵消数据的损失

缺点:

  • 增加了较少的方差
  • 编码时给模型增加了另一个特征,这可能导致性能不佳

方法4:用最邻近算法KNN进行估算

KNN是一种机器学习算法,其工作原理是距离测量。这种算法可以在数据集中存在空值的情况下使用。在应用该算法的时候,KNN通过取最近的K个值中的大多数来考虑缺失值。

这种估算算法与sklearn的KNearesNeighbours非常相似。它从数据集中找到与NaN值的样本最接近的k个样本,然后用这些样本的平均值进行估算。

方法5:用随机森林算法(Randforest)进行估算

这里可以使用的另一种算法是RandomForest。这个模型产生了一个稳健的结果,因为它在非线性和分类数据上运行良好。它能适应数据结构,考虑到高方差或偏差,在大数据集上产生更好的结果。
优点:

  • 不需要为数据集中有缺失数据的每个属性建立一个预测模型。
  • 忽略了数据的关联性

缺点:

  • 是一个非常耗时的过程,在提取大型数据库的数据挖掘中,它可能是至关重要的。
  • 距离函数的选择可以是欧几里得、曼哈顿等,但不能产生一个稳健的结果。

方法6:用MICE进行代偿

该算法对每一列有一些缺失值的数据进行线性回归。然后,它使用这些线性函数,用这些值的预测值来估算NaN值,这个方法也是我们遇到的比较好用的算法。
KNN和MICE推断使用整个数据集来替换NaN值,而中位数和平均值只使用缺失值的那一列,这就是为什么后两种算法不会强烈影响数据集的结构,不会改变其信息。估算连续值的最佳方法是使用整个数据集的方法,如MICE或KNN。

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星空下0516

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值