文档视界 最新最全的文档下载
当前位置:文档视界 › 模糊C均值聚类程序

模糊C均值聚类程序

模糊C均值聚类程序
模糊C均值聚类程序

实验二模糊C均值聚类

实验目的:

学会使用MATLAB软件进行模糊C均值聚类,学会如何进行迭代并观察迭代过程。

实验学时:4学时

实验内容:

1、认真阅读guide.doc文件,通过给出的英文的例子学习进行C均值聚类的具体步骤。

2、在学习完所给的例子后进行实际操作。根据表格提供的固定资本和人力资本等进行聚类分布。进一步熟悉和掌握熟悉FUZZY CLUSTERING.

实验日期:2013年4月24日

实验过程:

1、查看所给数据表格(如下),由经济学理论知,GDP的产出状况是由固定资本的投入和人力资源的投入决定的。因此,实际上我们只需要选取固定资本和人力资源这两组数据进行处理就行了。

2、通过学习guide中的范例,将所给的defcm.m程序进行重新编辑。其具体程序如下:

function [NCentres, M] = defcm(Centres, q)

Tiles = [

5.9489 1.3600 1

4.0308 1.3990 1

2.0314 0.3850 1

1.4208 1.2810 1

8.0396 1.7480 1

2.2450 1.0880 1

3.1038 0.8940 1

2.0523 1.1550 1

1.6534 0.9470 1

2.7298 1.0260 1

1.6223 0.8690 -1

1.0337 0.7960 -1

1.1099 0.9310 -1

0.3114 1.0220 -1

0.8112 0.6140 -1

0.7494 0.7850 -1

1.9210 0.6530 -1

1.3820 1.0000 -1

0.9171 0.6660 -1

0.8342 0.5460 -1

0.8127 0.6200 -1

0.8127 0.6200 -1

1.0410 0.5630 -1

0.5756 0.2990 -1

1.0166 0.4660 -1

1.3588 0.5240 -1

1.0307 0.5740 -1

0.8544 0.4590 -1

1.508 0.5500 -1

1.5036 0.5180 -1

2.0226 0.9110 -1

] ;

% 将固定资本和人力资本的数据按GDP的平均值进行分类,大于平均值的分为一类,记为1,小于平均值的分为一类,记为-1

Tiles(:, 1) = log(Tiles(:, 1)) ;

Tiles(:, 2) = log(Tiles(:, 2)) ;

clf ; hold off;

plot(Tiles(1:16, 1), Tiles(1:16, 2), 'ob') ;

axis([-1.5 2.5 -1.5 2.5]) ;

xlabel('固定资本') ;

ylabel('人力资本') ;

title('Tiles data: o = whole tiles, * = cracked tiles, x = centres') ;

hold on;

plot(Tiles(17:31, 1), Tiles(17:31, 2), '*b') ;

plot(Centres(:,1), Centres(:,2),'xr') ;

Object = Tiles(:,[1 2])' ;

Centres = Centres' ;

k = length(Centres(:,1));

D = dist(Object, Centres);

M = member(D, q) ;

ClustSums = sum(M) ;

[NoOfObs, NoOfCtrs] = size(M) ;

z = M ./ (ones(NoOfObs,1) * ClustSums) ;

NCentres = Centres' ;

for i = 1:NoOfCtrs,

w = z(:,i) * ones(1,2) ;

NCentres(i,:) = sum(Object' .* w) ;

end ;

3、将上述程序保存为defcm.m文件,然后在命令窗口中输入初始聚类中心Cts = [0.5 0.5; 0.8 0.8],即在这里面我们取了两个聚类中心点,c1=(0.5,0.5)、

c2=(0.8,0.8),并设q=2。

需要注意的是,q越接近1收敛速度越快,但若q=1则为硬C均值聚(HCM)。然后不断调用函数defcm,[Cts, M] = defcm(Cts,q)。

即在Command窗口中输入:

Cts = [0.5 0.5; 0.8 0.8];

q = 2;

[Cts, M] = defcm(Cts,q)。

本次实验一共迭代了13次,M矩阵才不再变化,达到了最佳聚类中心。迭代的仿真图形如下所示:

(迭代时只要将Command窗口中Cts中的值换成前一次迭代输出的值即可)第1次迭代仿真的图形

-1.5

-1-0.50

0.51 1.52 2.5

-1.5-1-0.500.51

1.52

2.5固定资本

人力资本

Tiles data: o = whole tiles, * = cracked tiles, x = centres

第6次迭代仿真的图像

-1.5

-1-0.50

0.51 1.52 2.5

-1.5-1-0.500.51

1.52

2.5固定资本

人力资本

Tiles data: o = whole tiles, * = cracked tiles, x = centres

第13次的迭代图形:

-1.5

-1-0.50

0.51 1.52 2.5

-1.5-1-0.500.51

1.52

2.5固定资本

人力资本

Tiles data: o = whole tiles, * = cracked tiles, x = centres

下面为最终的聚类中心和M 矩阵。

Cts =

0.0733 -0.4495 0.7166 -0.0713 M =

0.2683 0.7317 0.2094 0.7906 0.5422 0.4578 0.2945 0.7055 0.3096 0.6904 0.0382 0.9618 0.1241 0.8759 0.0570 0.9430 0.1187 0.8813 0.0780 0.9220 0.1822 0.8178 0.9066 0.0934 0.7226 0.2774 0.6688 0.3312 0.9268 0.0732 0.8565 0.1435 0.2787 0.7213

0.3759 0.6241

0.9650 0.0350

0.9244 0.0756

0.9274 0.0726

0.9274 0.0726

0.9770 0.0230

0.7501 0.2499

0.9048 0.0952

0.8426 0.1574

0.9818 0.0182

0.8865 0.1135

0.7317 0.2683

0.7387 0.2613

0.0012 0.9988

4、由于不能确保FCM收敛于一个最优解,所以我们可以采用不同的初始聚类中心启动该算法,以便用来比较结果。

在Command窗口中输入:

Cts = [0.5 1.0; 1.5 2.0];

q = 2;

[Cts, M] = defcm(Cts,q)

在这次实验一共迭代了15次,M矩阵才不再变化,达到了最佳聚类中心。

在这里只给出第15次,Command窗口中显示的聚类中心值Cts和M矩阵:

通过最终的迭代图可以看出:当初始聚类中心取值不同时,最后的聚类中心点的值也有细微的差别。

FCM是否收敛于一个最优解,不仅与初始聚类中心的选择有关,还与加权指数q有关。由模糊集的知识我们知道,加权指数q取得过大,聚类效果会很差;q取得过小则算法会接近与HCM聚类算法。

所以下面的仿真中,其他数据不变,取:q=1.1,聚类中心为Cts = [0.5 0.5; 0.8 0.8]。经过MATLAB仿真后知道,此时只需迭代8次就可达到了最佳聚类中心。

下面只给出第八次迭代的相关数据:

实验小结:

通过这次实验对模糊C均值聚类(FCM)有了近一步的了解,并且结合例子能够进行简单的聚类中心迭代,寻找最佳聚类中心。另外,通过q取不同的值进行了比较,得到了更快更好的聚类中心。

通过观察实验结果,明确FCM算法的输出是C个聚类中心向量和C*N的一个模糊划分矩阵M,这个矩阵表示的是每个样本点属于每个类的隶属度。根据这个划分矩阵按照模糊集合中的最大隶属原则就能确定每个样本归哪个类。聚类中心表示的是每个类的平均特性,可以认为是这个类的代表点。FCM算法因算法简单、收敛速度快、易于应用计算机实现等特点受到了越来越多人的关注,并应用于各个领域。

相关文档