【问题标题】:Not able to cluster square matrix with more than 317 rows and columns using k-means?无法使用 k-means 对超过 317 行和列的方阵进行聚类?
【发布时间】:2016-02-09 11:09:47
【问题描述】:

我有一个 1750×1750 矩阵,Y。我想使用 k-means 将其聚类为 50 个聚类。我的代码是:

[idx,C] = kmeans(Y,50)

但是,我不断收到错误消息:

使用 kmeans 时出错(第 243 行)
X 的行数必须多于簇数。

为什么?怎么回事?

我减小了矩阵的大小,通过反复试验,我发现直到矩阵大小为 317×317 时才会出现错误。除此之外,从 318×318 及以上,它开始抛出错误。

【问题讨论】:

  • 对于kmeans,行数决定样本数,列数表示每个点的特征数。 Y 究竟代表什么?
  • @rayryeng 你好。 Y 是我通过一些不相关的计算得出的矩阵。它包含 1750 张图像之间的相似性。现在我想根据它们的相似性值(来自矩阵Y)将它们聚类成 50 个簇。
  • 你检查过第318行第318列的值了吗?如果由于某种原因一列全部为NaN,您将得到这个错误(以及警告:“警告:忽略缺少数据的X行。”),例如,A=rand(10);A(:,5)=NaN;kmeans(A,3)
  • @horchler 啊,你一针见血。我应该想到检查这一点。确实如此。

标签: matlab k-means


【解决方案1】:

检查您的数据矩阵 Y 是否没有任何仅包含 NaN 值的列。您可以从第 318 列开始,因为您知道包含它会导致错误。使用isnanall

all(isnan(Y(:,318))

您可以通过以下方式检查输入数据矩阵的所有列:

find(all(isNaN(Y)))

这将返回所有为NaN 的列的索引。

【讨论】:

    猜你喜欢
    • 2016-07-28
    • 1970-01-01
    • 2015-01-16
    • 2012-03-24
    • 2017-11-01
    • 2015-06-22
    • 2013-03-11
    • 2019-05-03
    • 2018-08-10
    相关资源
    最近更新 更多