首先,我想指出我是Matlab的初学者,所以如果我的问题听起来很愚蠢,我会道歉。
我有一个包含1460行和36列的数据集。其中三列有一些缺失值,显示为NaN。我想使用k近邻方法来估计那些NaN,但经过9个多小时的尝试,我甚至还没有更接近得到结果。
具有最多缺失值的列是第一列,因此我们假设我想首先处理该列。教授告诉我首先确定哪一列与第一列相关。其次,我必须将我的数据集拆分为仅纳米的行向量和剩下的矩阵,为简单起见,我们将其称为矩阵A.第三,我必须使用knnsearch从矩阵A中找到索引,然后用这些索引替换行向量的NaN。
由于某种原因,我无法理解指令,我认为我的任务不应该是火箭科学。有没有更简单的方法?我只需要通过KNN填写那些缺失值。
反馈将不胜感激。 谢谢。
答案 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集中的字段的平均值。