MATLAB中的kmeans:簇的数量>行数?

时间:2014-03-29 23:20:04

标签: matlab cluster-analysis k-means

我第一次在MATLAB中使用Statistics Toolbox函数kmeans。我想得到最近的质心的欧几里德总距离作为最佳k的指标。 这是我的代码:

clear all

N=10;

opts=statset('MaxIter',1000);

X=dlmread(['data.txt']);

crit=zeros(1,N);
for j=1:N
    [a,b,c]=kmeans(X,j,'Start','cluster','EmptyAction','drop','Options',opts);
        clear a b
        crit(j)=sum(c);
end

save(['crit_',VF,'_',num2str(i),'_limswvl1.mat'],'crit')

一切都应该顺利,除了我得到j = 6的这个错误:
    X必须有比行数更多的行。

我不明白这个问题,因为X有54行,没有NaN 我尝试使用不同的EmptyAction选项,但它仍然无法正常工作。

有什么想法吗? :)

1 个答案:

答案 0 :(得分:1)

由于您使用cluster方法获取初始质心,因此会出现此问题。从MATLAB文档:

  

'簇' - 随机执行初步聚类阶段10%                          X的子样本。这个初步阶段本身就是                          使用' sample'初始化。

因此,当j=6时,它会尝试将10%的数据划分为6个聚类,即54~5的10%。因此,您会收到错误X must have more rows than the number of clusters

要解决此问题,请随机选择点(sample方法)或统一选择点(uniform方法)。