使用 KNN 进行缺失数据插补

数据挖掘 缺失数据 数据插补
2022-03-07 06:04:25

-1 最喜欢的投票我有一个数据集,其中包括大多数变量的缺失数据。假设数据集如下:

Obs.  var1  var2  var3  var4  var5  var6
1     x11   x12   x13   x14    Nan  Nan
2     x21   x22   x23   Nan    x25  x26
3     x31   x32   x33   x34    x35  x36
...
n     xn1   xn2   xn3   xn4    Nan  xn6

我已将数据集拆分为 d1 ,其中我们拥有所有变量的完整数据,而 d2 则所有记录都至少有一个缺失变量。

我使用 KNN 制作了不同的模型:为了预测第一次观察的 var5 和 var6 的值,我使用了 d1(没有缺失值的数据集)并以 var1、var2、var3 和 var4 为模型。

为了预测最后一次观察的 var5 的值,我使用了 d1 并以 var1、var2、var3、var4 和 var5 为模型。

我的方法有意义吗?!欢迎任何建议。谢谢你。

1个回答

有多种处理缺失值的方法。假设我们在数据集中有 4 个实例:

x1 = [1 2 3]
x2 = [1 ? 3]
x3 = [2 4 2]
x4 = [1 3 3.5]
  1. 一种简单的方法(在医学数据集中特别流行)是找到关于最相似实例的值;在上述情况下,缺失值x2将是:2(因为x1是最相似的)

  2. 一种更复杂的方法是对 k 个最相似的实例进行加权平均(当然,仅适用于缺失值是数字或至少是序数的情况)在这种情况下,您应该计算:(x2(2) = (2*(1-(0/3)) + 3*(1-(0.5/3)) / (2-(0/3)-(0.5/3))x4被算作类似情况

  3. 另一种方法是在 k 个最相似的实例中投票(适用于分类值和序数值)。

案例 1 和 3 是您实施的(案例 1 = 1 最近邻 / 案例 2 = k 最近邻)

还有其他处理缺失值的方法,但这取决于您要如何处理数据集。例如在非常大的数据集中,有时简单地忽略包含至少一个缺失值的每个实例,或者在进一步的过程中(例如在VFI算法中)只忽略缺失值(而不是整个实例)是有效的