分享

(1)K-均值聚类算法

 恶魔传说 2015-12-07

  

在聚类分析中,K-均值聚类算法(k-means algorithm)是无监督分类中的一种基本方法,其也称为C-均值算法,其基本思想是:通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果。

假设要把样本集分为c个类别,算法如下:

(1)适当选择c个类的初始中心;

(2)在第k次迭代中,对任意一个样本,求其到c个中心的距离,将该样本归到距离最短的中心所在的类,

(3)利用均值等方法更新该类的中心值;

(4)对于所有的c个聚类中心,如果利用(2)(3)的迭代法更新后,值保持不变(目标函数收敛),则迭代结束,否则继续迭代。

利用均值更新类中心:

 

K-均值聚类算法

利用误差平方和作为目标函数(准则函数)
K-均值聚类算法

 

 

 

 

 

 

编写K-均值聚类算法程序,对下图所示数据进行聚类分析(k=2)

 

K-均值聚类算法

1. 解:用matlab编写k-均值聚类程序:

kmean.m

k-均聚类算法

 

clear;

 

main variables

dim 2; 模式样本维数

2;   设有k个聚类中心

 

fid fopen('test.txt');

PM fscanf(fid,'%g %g',[2 inf]);

PM PM';  模式样本矩阵

fclose(fid);

 

size(PM,1);

 

CC zeros(k,dim); 聚类中心矩阵,CC(i,:)初始值为i号样本向量

zeros(N,k); D(i,j)是样本i和聚类中心j的距离

 

cell(1,k); %% 聚类矩阵,对应聚类包含的样本。初始状况下,聚类i(i<k)的样本集合为[i],聚类k的样本集合为[k,k+1,...N]

for 1:k-1

    C{i} [i];

end

C{k} k:N;

 

1:N; 上次迭代中,样本属于哪一聚类,设初值为1

B(k:N) k;

 

for 1:k

    CC(i,:) PM(i,:);

end

 

while   

     打印C,CC     

    for 1:k

        disp(C{i});

    end;    

    disp(CC);

    

    change 0;

    对每一个样本i,计算到k个聚类中心的距离

    for 1:N

        for 1:k

            D(i,j) eulerDis( PM(i,:), CC(j,:) );

        end

        find( D(i,:) == min(D(i,:)) ); i属于第t

        if B(i) ~= 上次迭代i不属于第t

            change 1;

            i从第B(i)类中去掉

            t1 C{B(i)};

            t2 find( t1==i );            

            t1(t2) t1(1);

            t1 t1(2:length(t1)); 

            C{B(i)} t1;

            

            C{t} [C{t},i]; i加入第t

            

            B(i) t;

        end        

    end

    

    if change == 0

        break;

    end

    

    重新计算聚类中心矩阵CC

    for 1:k

        CC(i,:) 0;

        iclu C{i};

        for 1:length(iclu)

            CC(i,:) PM( iclu(j),: )+CC(i,:);

        end

        CC(i,:) CC(i,:)/length(iclu);

    end

end

 

 

2.  程序中test.txt为:

0

0

1

1

1

2

2

2

6

6

6

7

7

7

7

8

8

8

9

9

即各样本向量。

 

 

3.  运行程序输出为:

1

 

                               10    11    12    13    14    15    16    17    18    19    20

 

    0

    0

 

    3

 

                           10    11    12    13    14    15    16    17    18    19    20

 

    0.5000

 5.6667    5.3333

 

                            8

 

   10    11    12    13    14    15    16    17    18    19    20

 

1.2500    1.1250

7.6667    7.3333

 

 

整理数据为:

(1) 初始态为:聚类1包括样本1,其聚类中心向量为(00);聚类2包括样本220,其聚类中心向量为(10)。

(2) 迭代一次得到:聚类1包括样本13,其聚类中心向量为(00.5000);聚类2包括剩余所有样本,其聚类中心向量为(5.66675.3333)。

(3) 迭代第二次得到:聚类1包括样本13245678,其聚类中心向量为(1.25001.1250);聚类2包括剩余所有样本,其聚类中心向量为(7.66677.3333)。

(4) 收敛,算法结束。故最终分类为{1,2,3,4,5,6,7,8},{9,10,11,12,13,14,15,16,17,18,19,20}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多