k_均值聚类的matlab仿真设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

K 均值聚类的Matlab 仿真设计

宋丽红

(重庆工商大学经济管理实验教学中心,重庆 400067)

摘 要:从理论、设计程序和代码实现等方面,说明如何通过数据挖掘中K 均值聚类算法,利用M atlab 的灵活编程功能进行探索性和优化性综合实验。以实验教学实践说明,为将创新思维和动手能力培养贯穿于实验教学的始终,利用M at lab 仿真K 均值聚类具有较好的实际意义。关键词:K 均值聚类;程序设计;M atlab 仿真

中图分类号:T P 18;T P391.9 文献标志码:A 文章编号:1002 4956(2010)10 0101 03

Matlab simulation design for K means clustering

So ng Liho ng

(Eco no mics and M anagement Center,Cho ng qing T echno lo gy and

Business U niv ersity ,Chongqing 400067,China)

Abstract:By data mining K means cluster ing alg or ithm,this article uses M atlab pro gr amming functio n of flex ibilit y,f rom t heo ry to design pro gr am,and t o code realization,discusses how to t rain innovat ive thinking and t he ability in ex periment teaching in t he w ho le teaching process.and indicat es that simulating K means cluste r ing by M at lab has a g reater pr actical sig nificance.

Key words:K means cluster ing;pr og ram design;M atlab simulation

收稿日期:2009 11 19 修改日期:2010 03 10

基金项目:重庆市科委自然科学基金计划资助(2007BB2205);重庆市科

委重点攻关项目(2008AC0043)

作者简介:宋丽红(1969 ),女,四川省越西县人,实验师,主要从事实

验室管理及计算机应用研究.

E mail:slh218@

聚类是将数据集按照数据的相似性进行重新组合而成为多个类的过程。聚类与分类不同:分类是一种监督学习方法,在分类之前已经知道数据类的特性;聚

类是一种非监督学习方法,在聚类之前不知道数据类的特性。在数据挖掘的实验教学中,教师往往只重视聚类算法本身,并没有真正理解聚类的本质,只将聚类算法写成固定形式,甚至只把不能变化的程序和预先给定的分好的数组进行聚类,错误理解了聚类的本质,没有将灵活的算法和聚类的思想融入实验中。没有达到在实验中培养学生创新思想和能力的目的[1 3]

Matlab 具有灵活的聚类处理能力,它的好处比起C 及C++来说,不但代码灵活多变,而且处理复杂问题的计算能力极强

[4 8]

,工程应用很广。在实验教学

中,对于具有研究性、灵活性的算法程序设计,M atlab 是培养学生思维能力的好帮手。我们在实验教学中充分利用M atlab 的这一特性,将实验理论与创新思想相

结合,通过K 均值聚类这一数据挖掘算法,在实验中培养学生的创新实践能力,达到了很好的教学效果。

1 K 均值聚类算法设计

聚类的非监督学习能力可以通过如下的数学定义来体现[9]:

定义1 给定由一些元组组成的数据库D ={t 1,t 2, ,t n }和整数值k,则聚类问题是定义一个映射f :D !{1,2, ,k},其中第i 个元组t i 被映射到第j 个簇K j 中。第j 个簇K j 是由所有被映射到该簇中的元组组成,即K j ={t j |f (t j )=j ,1∀j ∀k,t i #D}。1.1 提出程序创新设计的思想

在实验教学中,我们打破常规,事先不对学生说明实验数据的特性,但是提醒学生注意进行创新设计的3个方面:(1)实验前聚类中簇的最优个数是不知道的;(2)实验前关于每个簇没有任何先验知识;(3)聚类的结果必须是动态的。

基于上述条件和要求,我们选择K 均值聚类[9 10]。K 均值聚类算法是一种有限迭代的聚类算法,设簇K i ={t i 1,t i 2, ,t im },则均值定义为:

m i =1

m

∃n

k=1t

ik

ISS N 1002-4956

CN11-2034/T

实 验 技 术 与 管 理

Ex perim ental Technology an d M anagem ent

第27卷 第10期 2010年10月Vol.27 No.10 Oct.2010

迭代中不断移动簇中的元素直至达到要求的簇或达到规定的迭代次数为止。为了培养学生的灵活设计能力,我们给出K 均值聚类算法的程序伪代码:

输入:

D={t1,t2,,t n} //元素集合

k //期望的簇的数目

输出:

K //簇集

K 均值聚类算法:

初始化每类均值m1,m2,,m k;

迭代:

将每个元素t i(i=1,2,,n)分配到具有最近中心的聚类中去;重新计算新的簇;直到达到给定收敛条件为止。

可见,设t是迭代次数,k为期望的簇的数目,n为簇中元素的个数,则K 均值聚类算法的时间复杂度是O(tkn)。实验中我们要求t、k、n这3个参数都动起来,实现算法上的创新。

1.2 设计灵活的K 均值聚类Matlab程序

实验中我们引导学生设计一个动态灵活的程序: function kmean(x,k,r) //x是输入待分类的向量,k 表示将x分为k类,r是迭代次数

time=cputime;//计算算法的CPU计算时间

A=size(x);//找出矩阵x的大小

m=A(1);//x有m行

n=A(2);//x有n列

M=zer o(m,k);//每类的中心矩阵

if n

fpr intf(%输入向量个数必须大于分类个数,请重新输入!%) else

for i=1&k

M(&,i)=x(&,i);//初始化给出每类的中心

end

for dd=1&r//设置迭代次数为r次

fpr intf(%第%d次迭代......%,dd);//打印迭代次数

//下面计算每个向量到每类中心的距离

dis=zero s(n,k);

for i=1&n

for j=1&k

for h=1&m

dis(i,j)=dis(i,j)+abs(x(h,i)-M(h,j));

end

end

end

//下面计算每个向量到每类中心距离的最小值

s=zero s(1,n);

for i=1&n

pp=find(dis(i,&)==m in(dis(i,&)));

s(1,i)=pp(1,1);

end

//以下计算每一类的向量

class=[]; for i=1&k

class=[];

//以下重新计算每类的中心

if leng th(class)==0

fpr intf(%第%d类是空,质心都为0!%,i);

for g=1&m

M(g,i)=0;

end

else

for g=1&m

M(g,i)=mean(class(g,&));

end

end

time=cputime time;

fpr intf(%计算所花时间是:%d秒%,time);

上述程序设计充分利用了Matlab灵活而易用的功能,设计的输入待分类的向量x是可以任意指定的,维数任意,聚类个数k也是任意指定的,迭代次数r也可以任意给定。这样设计的目的是可以让学生更清楚地理解和设计算法到了多少步就可以收敛,并以此讨论数据的复杂性。学生在实验中真正进行了灵活设计和创新实践,设计能力大大提高。

2 仿真结果

我们在内存为1GB,CPU为Intel1.60GH z,软件为M atlab6.5的计算机上进行仿真运算。

例如设有9个二维数据样本:

x=2

2

2.5

2.1

3

3.5

10

12

11

13

12

11.

8

20

18

21

19

18

20

它们在平面上的分布如图1所示。如果分为2类,其聚类结果如图2所示,其中有6个样本聚为一组,其余3个样本为另一组。这实际上是将前6个样本聚类为一簇,后3个聚类为另一簇,是符合实际样本距离的(见图3)。

图1 数据样本分布图

如果我们将样本聚为3类,其归一化数据后样本聚类结果如图4所示,这个结果是将样本前3个、后3个和中间3个样本根据绝对值距离各聚成一类。

根据样本的平面分布,它们各自的近距离邻居聚为一类是非常明显的(见图5)。从这个分析中更看到了聚类的实质,从而理解这种非监督学习算法和监督学习算法的差别。

102实 验 技 术 与 管 理

相关文档
最新文档