首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列上的K近邻

列上的K近邻
EN

Stack Overflow用户
提问于 2014-05-10 20:15:58
回答 2查看 2K关注 0票数 0

我有一个有未知数的数据集,我认为我可以使用k-最近的邻居。当我在Matlab中读取函数knnimpute的描述时,它说它用最接近的邻列值替换NaN值。所以我在那个列上做了一个转置,所以所有的数据现在都在一个行中。但是,我发现一个错误,即所有行都有NaN值。所以我有点搞不懂该怎么做。

下面是我运行的代码:

代码语言:javascript
复制
knnimp = knnimpute(transpose(ds.stage),k);

我无法提供数据的屏幕截图,但如下所示(所有数据都是连续的):

代码语言:javascript
复制
1 2 4 3 2 1 1 NaN 3 3 3 1 NaN 2 NaN

下面是在转置数据上运行代码后得到的输出:

代码语言:javascript
复制
All rows of the input data contains missing values. Unable to impute missing values.
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-11 09:52:01

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

查看方法文档上的示例1,它需要一个矩阵,其中每一列都是一个示例,每一行都是一个特性。看来,用于填充缺失的nan值的技术只有在每个示例具有多个特性时才有效(即:如果您正在传递一个矩阵)。

当您传递一个向量(即多个样本和单个特征)时,该算法无法填充NaNs,因此在应用k-最近邻函数之前,您必须删除它们。

类似于:

代码语言:javascript
复制
temp_stage = ds.stage(~isnan(ds.stage));
knnimp = knnimpute(transpose(temp_stage),k);
票数 0
EN

Stack Overflow用户

发布于 2016-03-09 20:30:52

即使使用一个矩阵作为参数,如果矩阵的每一行至少有一个缺少的元素,则非线性函数也会抛出错误消息。我不确定如何满足这个约束(拥有没有缺少元素的行)。这相当于期望一个没有丢失一个或多个功能值的数据集。

示例:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23585854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档