【问题标题】:How do I use the k-nearest neighbor approach to remove NaNs on Matlab?如何在 Matlab 上使用 k 近邻方法去除 NaN?
【发布时间】:2018-10-23 11:52:21
【问题描述】:

首先,我想指出我是 Matlab 的初学者,所以如果我的问题听起来很愚蠢,我深表歉意。

我有一个包含 1460 行和 36 列的数据集。其中三列有一些缺失值,显示为 NaN。我想使用 k-最近邻方法来估计这些 NaN,但经过 9 多个小时的尝试,我仍然离得到结果更近一步。

缺失值最多的列是第一列,所以假设我想先处理它。教授告诉我首先确定其他列中的哪一列与第一列相关。其次,我必须将我的数据集拆分为仅包含 NAN 的行向量和剩余的矩阵,为简单起见,我们将其称为矩阵 A。第三,我必须使用 knnsearch 从矩阵 A 中找到索引,然后用这些索引替换行向量的 NaN。

由于某种原因,我无法理解说明,而且我认为我的任务不应该是火箭科学。有没有更简单的方法?我只需要通过 KNN 填充那些缺失的值。

我们将不胜感激。 谢谢。

【问题讨论】:

    标签: matlab


    【解决方案1】:

    在不考虑包含缺失值的列(缺失字段)的情况下,使用其他列来获取记录之间的相似性(您可以使用欧几里得距离来做到这一点)。然后,使用 KNN 算法,找到与包含缺失字段的记录最接近的记录,并将该记录的 KNN 集中字段的平均值替换为每条记录中的缺失字段。

    【讨论】:

      【解决方案2】:

      Matlab 有一个可以使用的内置 knn 函数。

      这是一个如何在命令行窗口中使用它的示例。

      >> nanmatrix = [NaN 1 0;1 -1 1;1 0 0]
      
      nanmatrix =
      
         NaN     1     0
           1    -1     1
           1     0     0
      
      >> cleanmatrix = knnimpute(nanmatrix,1)
      
      cleanmatrix =
      
           0     1     0
           1    -1     1
           1     0     0
      
      >> cleanmatrix = knnimpute(nanmatrix,2)
      
      cleanmatrix =
      
          0.3090    1.0000         0
          1.0000   -1.0000    1.0000
          1.0000         0         0
      

      第一个“cleanmatrix”来自 k=1 的估计。第二个是来自 k=2 的估计。

      希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 2021-07-14
        • 2014-04-12
        • 2011-12-30
        • 1970-01-01
        • 1970-01-01
        • 2014-08-08
        • 2012-07-19
        • 1970-01-01
        • 2018-05-09
        相关资源
        最近更新 更多