列上的k-Nearest-Neighbor

时间:2014-05-10 20:15:58

标签: matlab machine-learning nearest-neighbor

我有一个带有未知数的行的数据集,我认为我可以使用k-Nearest Neighbor。当我在Matlab中阅读函数knnimpute的描述时,它说它用最近的邻居列值替换NaN值。所以我在该列上进行了转置,因此所有数据现在都在一行中。但是,我收到一条错误消息,说明所有行都包含NaN值。所以我对如何去做有点困惑。

这是我运行的代码:

knnimp = knnimpute(transpose(ds.stage),k);

我无法对数据进行屏幕截图,但这里看起来像是什么(所有数据都在一行):

1 2 4 3 2 1 1 NaN 3 3 3 1 NaN 2 NaN

这是我在转置数据上运行代码后获得的输出:

All rows of the input data contains missing values. Unable to impute missing values.

2 个答案:

答案 0 :(得分:0)

从外观上看,你在一个数据向量上运行k-最近邻居;这是一组样本,每个样本只有一个特征。

查看method documentation上的示例1,它需要一个矩阵,其中每列都是一个样本,每行都是一个特征。似乎用于填充缺失的纳米值的技术仅在每个样本有多个特征时才起作用(即:如果您在矩阵中传递)。

当您传递矢量(即多个样本和单个特征)时,算法无法填充NaN,因此您必须在应用k近邻函数之前将其删除。

类似的东西:

temp_stage = ds.stage(~isnan(ds.stage));
knnimp = knnimpute(transpose(temp_stage),k);

答案 1 :(得分:0)

即使使用矩阵作为参数,如果矩阵的每一行至少有一个缺失元素,则knnimpute函数会抛出错误消息。我不确定如何通常可以满足此约束(具有没有缺少元素的行)。这相当于期望一个或多个特征没有缺失值的数据集。

Example: