【问题标题】:k-Nearest-Neighbor on a column列上的 k-Nearest-Neighbor
【发布时间】:2014-06-28 10:44:23
【问题描述】:

我有一个数据集,其中一行包含未知数,我认为我可以在其上使用 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.

【问题讨论】:

  • 很难猜出问题的原因。您能否发布一个最小示例:数据集、您的命令、输出?

标签: matlab machine-learning nearest-neighbor


【解决方案1】:

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

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

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

类似:

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

【讨论】:

  • 我真正想要的是使用最近的邻居来估计 NAN 的值,而不是完全取出 NaN,因为我需要对数据集中的其他特征进行贝叶斯分类,包括ds.stage 作为分类的一个属性
  • 问题是你没有给算法任何东西来进行估计。我认为您需要在数据集中涉及其他功能;它们是什么?
【解决方案2】:

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

Example:

【讨论】:

    猜你喜欢
    • 2011-06-24
    • 2015-04-17
    • 1970-01-01
    • 2016-02-04
    • 2021-08-30
    • 2016-01-24
    • 2015-05-06
    • 1970-01-01
    • 2011-07-25
    相关资源
    最近更新 更多