我有一个有未知数的数据集,我认为我可以使用k-最近的邻居。当我在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.发布于 2014-05-11 09:52:01
从外观上看,您是在单个数据向量上运行k-最近邻;即一组样本,每个样本只有一个特征。
查看方法文档上的示例1,它需要一个矩阵,其中每一列都是一个示例,每一行都是一个特性。看来,用于填充缺失的nan值的技术只有在每个示例具有多个特性时才有效(即:如果您正在传递一个矩阵)。
当您传递一个向量(即多个样本和单个特征)时,该算法无法填充NaNs,因此在应用k-最近邻函数之前,您必须删除它们。
类似于:
temp_stage = ds.stage(~isnan(ds.stage));
knnimp = knnimpute(transpose(temp_stage),k);发布于 2016-03-09 20:30:52
即使使用一个矩阵作为参数,如果矩阵的每一行至少有一个缺少的元素,则非线性函数也会抛出错误消息。我不确定如何满足这个约束(拥有没有缺少元素的行)。这相当于期望一个没有丢失一个或多个功能值的数据集。
示例:
https://stackoverflow.com/questions/23585854
复制相似问题