如何使用k近邻方法在Matlab上删除NaN?

时间:2018-05-13 19:22:03

标签: matlab

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

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

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

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

反馈将不胜感激。 谢谢。

2 个答案:

答案 0 :(得分:0)

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。

希望这有帮助!

答案 1 :(得分:0)

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