我经历过大多数数据集都包含缺失值,这使我们的任务有点挑战性。
请让我知道如何以有效的方式填补这些缺失值?是否有任何特定的技术来处理缺失值?
我经历过大多数数据集都包含缺失值,这使我们的任务有点挑战性。
请让我知道如何以有效的方式填补这些缺失值?是否有任何特定的技术来处理缺失值?
有多种方法可用于填充数据中的缺失值。
忽略元组是最简单但无效的方法。
手动填写缺失值。
使用全局常量来填充缺失值。
使用属性均值填补缺失值。
对与给定元组属于同一类的所有样本使用属性均值。
使用最可能的值来填充缺失值(这可以通过回归、推理工具或决策树归纳来确定)
参考:
数据挖掘 - 概念和技术 - JIAWEI HAN & MICHELINE KAMBER,ELSEVIER,第 2 版。
首先,如果您的大部分数据丢失,那么无论如何您都会遇到麻烦。您需要询问为什么大部分数据丢失,以及为什么您观察到的数据没有丢失。丢失很可能会告诉您数据中的某些内容。
所有纠正缺失数据的方法,包括朴素插值法、均值替换法和中值替换法,都假设您可以在很大程度上忽略数据缺失的原因——这些是随机缺失 [MAR] 和(更强)完全随机缺失 [MCAR],假设。如果其中一个或两个不正确(如果您的大部分数据丢失,这很可能),那么已知不存在渐近可靠的插补方法。这并不意味着您无能为力 - 请参阅此处获取一些建议。
在大多数情况下,对于 MAR 数据,人们使用基于模型的方法。本质上,这些会多次估算数据集,使用缺失数据的合理模型填充缺失值,然后对估算数据集的集合进行分析。
我通常在 r 中使用 mouse 包。一张纸在这里。一个有用的网页位于 web.maths.unsw.edu.au/~dwarton/missingDataLab.html。
如果导致您丢失数据的过程是不可忽视的,换句话说,如果丢失告诉您一些事情,那么这些都不会起作用。它会产生漂亮的数字,但包括你在内,没有人会知道它们的含义。
是的,有很多方法可以处理缺失数据或缺失值,具体取决于任务和数据本身的属性。例如,在时间序列中,您可以考虑前向填充甚至后向填充、最大值、均值或中值。还有一些“更聪明”的方法,比如在可用数据上训练模型并尝试预测缺失的数据。最新的需要大量数据,因此可以提供有效的结果。您可以参考这两个链接以获取更多信息。
填充缺失值的最常见方法之一是使用线性插值:缺失值之前的先前有效值和缺失值之后的以下有效值用于插值。
例如,在Python-Numpy包中,您可以使用numpy.interp线性插值来填充缺失值。这是一个简单数组的示例:
>> import numpy as np
>> data=np.array([1,2,np.nan,6,9,np.nan,15])
>> print(data)
[ 1. 2. nan 6. 9. nan 15.]
>> nans, xf= np.isnan(data), lambda z: z.nonzero()[0]
>> data[nans]= np.interp(xf(nans), xf(~nans), data[~nans])
>> print(data)
[ 1. 2. 4. 6. 9. 12. 15.]