因为网上有很多关于Kmeans现成代码,这里主要讲,如何对聚类信息进行提取(我前面博客给出过Kmeans的代码/matble)
我主要做的是子图分离,先通过Kmeans方法,分离出k个子图,要对子图进行图构建,就需要知道,每个聚类块里面所包含的具体信息。
其中用到胞元进行矩阵存储,下面也会举例胞元循环中的变化
1: 首先 label=Kmeans(fea,k) %label是每一个样本对应的聚类号 ;label中只包含1,2,3……,k,这k种数;
2:
A=cell(1,K); %A为胞元 \\后面有给示例
[mFea,nSmp]=size(fea);
labelA=[];
labelA=[(1:mFea)',label]; %构建一个矩阵labelA,第一列对应mFea,第二列对应label;从而建立起来label与mFea %一一对应关系
for i=1:K %i为聚类i,一共有k个聚类for j=1:mFea
if labelA[j,2]==i; %找出label=i所对应的行,
A{1,i}(j,:)=fea(j,:); %提取这一行的所有信息,并赋值给A{1,i}胞元中的对应行 \\后面有给示例
end
end
end
3:最终结果是;每一个胞元中的元素,对应一个聚类集
下面是胞元在该过程中的示例
(自己这样想的,程序运行过程是合理的,如果发现问题欢迎留言)
AAA=cell(1,3) AAA = [] [] [] |
magic(4) A = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 |
||
i=2,j=1时 >> AAA{1,2}(1,:)=A(1,:); >> AAA{1,2}ans = 16 2 3 13
|
i=2,j=2时 >> AAA{1,2}(2,:)=A(2,:); >> AAA{1,2} ans = 5 11 10 8 AAA = |
i=2,j=3时
AAA{1,2}(3,:)=A(3,:);
AAA{1,2}ans =
16 2 3 13
5 11 10 8
9 7 6 12
AAA =
[] [3x4 double] []