我第一次在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选项,但它仍然无法正常工作。
有什么想法吗? :)
答案 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
方法)。