对于Kmeans的聚类信息提取处理

时间:2022-02-16 05:39:20

因为网上有很多关于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




AAA = 
    []    [1x4 double]    []

i=2,j=2时

>> AAA{1,2}(2,:)=A(2,:);

>> AAA{1,2}

ans =
    16     2     3    13

     5    11    10     8


AAA = 
    []    [2x4 double]    []

  

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]    []