Matlab用kmeans实现聚类算法.docx
- 文档编号:17811714
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:21
- 大小:748.45KB
Matlab用kmeans实现聚类算法.docx
《Matlab用kmeans实现聚类算法.docx》由会员分享,可在线阅读,更多相关《Matlab用kmeans实现聚类算法.docx(21页珍藏版)》请在冰点文库上搜索。
Matlab用kmeans实现聚类算法
学号:
课程设计
课程名称
MATLAB应用专项实践
题目
利用聚类算法实现对数据的分类
学院
信息工程学院
专业
电子科学与技术
班级
电子1303班
姓名
指导教师
吴皓莹
2016
年
1
月
13
日
课程设计任务书
学生姓名:
专业班级:
电子1303班
指导教师:
吴皓莹工作单位:
信息工程学院
题目:
利用聚类算法实现对数据的分类
初始条件:
1.Matlab7.1以上版本软件;
2.专业基础实践辅导资料:
“MATLAB神经网络43个案例说明”、“模式识别与智能计算的MATLAB实现”、“模式识别与智能计算——MATLAB技术实现”相关书籍等;
3.先修课程:
高等数学、线性代数、电路、MATLAB应用实践及信号处理类基础课程。
要求完成的主要任务:
题目:
1利用多种神经网络(如BP神经网络、自组织网络等)实现对数据的分类
2利用聚类算法(即非监督算法,如k-means等)实现对数据的分类
3利用监督算法(如决策树、贝叶斯、最近邻算法等)实现对数据的分类
4利用集成算法(如Boosting、Bagging、RandomSubspace等)实现对数据的分类
5利用Svm算法实现对数据的分类
要求:
1学习并掌握各种分类算法的分类原理;
2至少实现两种算法,并对比分析各自分类性能;
A若题目2中只实现了一种聚类算法,可另外再实现任一种监督算法进行比较分析;
B题目5中,也可任选另一种分类算法进行对比,或者具体分析SVM算法中核函数等多个参数的选择对分类性能的影响;
3要实现PCA算法,对比是否才有PCA算法对分类结果的影响;
4各个分类算法的参数设置对分类结果也有影响,实验过程中要注意参数的选择;
5分类过程及结果需要有丰富的图示说明。
时间安排:
1周
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
摘要
本次课程设计为应用专项实践课程设计,专业基础实践涉及方面很广泛,包括信号系统、物理光学、电磁场与电磁波等各方面知识的相互结合与实际运用。
旨在利用MATLAB软件解决相应的问题或完成相关的设计。
本次课程设计所选择的题目是Matlab利用聚类算法实现对数据的分类,实现对数据的分类是各门课程中的一个重要内容,利用MATLAB工具使复杂的数据分析直观明了,有利于我们加深对复杂数据数学模型化过程的理解。
本报告第一部分为Matlab软件的概论,包括功能、应用及一些基本的知识。
第二部分为本次课程设计的内容,涉及Matlab的程序编写和图像。
最后是本次课程设计的心得体会以及一些相关的文献。
关键词:
聚类算法;Matlab;K-means算法
Abstract
Thiscourseisdesignedfortheapplicationofthespecialpracticeofcurriculumdesign,professionalbasicpracticeinvolvesverybroadterms,includingmutualcombinedwiththepracticalapplicationofthesignalsystem,physicaloptics,electromagneticfieldandknowledgeofallaspectsofelectromagneticwaves.ItaimstouseMATLABsoftwaresolutionscorrespondingproblemorcompletetherelevantdesign.ThesubjectcurriculumdesignchoiceisMatlabusingclusteringalgorithmfordataclassification,dataclassificationisrealizedeachcourseanimportantcontent,useMATLABtoolsenablesophisticateddataanalysisintuitive,helpusdeepenmathematicalmodelingofcomplexdataprocessunderstanding.ThefirstpartofthisreportIntroductiontoMatlabsoftware,includingfeatures,applicationsandsomebasicknowledge.Thesecondpartofthiscourseisdesignedtocontent,theprograminvolvesthepreparationandMatlabimage.Finally,thiscourseisdesignedfeelingsandexperiencesaswellassomeoftherelevantliterature.
KeyWords:
ClusteringAlgorithm;Matlab;K-means
目录
第1章绪论1
第2章MATLAB语言概述2
2.1MATLAB语言的发展2
2.2MATLAB语言的特点4
2.3MATLAB的典型应用5
第3章聚类算法及K-means的应用6
3.1K-means算法的介绍6
3.1.1K-means算法的基本原理6
3.1.2K-means算法的实现7
3.2K-means的程序设计8
3.2.1K-means函数的调用方法8
3.2.2Matlab程序及仿真9
1、Matlab程序代码9
2、程序运行结果10
3、程序仿真图11
第4章程序结果分析及总结11
4.1分析方法11
4.2结果分析11
第5章心得体会12
致谢13
参考文献14
附录15
本科生课程设计成绩评定表17
第1章绪论
21世纪将以科学技术的高速发展为其特征,我国的发展将更多的取决于我国的综合国力,高速度高质量地培养千千万万掌握高技术的人才,是其中一个十分重要的任务。
要做到这一点,据必须具有十分的创造性。
在20世纪的最后20年中,计算机已经被成功地应用于工程设计和制造业中,在发达国家中普及率已经超过了90%,它成十倍地提高了劳动生产率,创造了空前巨大的物质文明;它把任何创新的思想转化为市场的商品时间缩短到了惊人的程度,新产品的种类淘汰之快都是20年前无法想象的。
国际互联网的广泛应用加快了从产业全球化的进程。
在这个极具挑战的时代中,把计算机充分应用到该工程计算过程中,,显然具有非常重要的意义。
从20世纪80年代开始,出现了多种科学计算语言,也成为数学软件。
经过十多年的发展和竞争,已经商品化的就有Matlab,Maple,Mathmatica,MathCAD等等。
它们的功能大同小异,又各有千秋。
就易学性和普及性而言,首推MATLAB语言。
本次课程设计就是利用Matlab语言来进行专业基础实践的课程设计,从而完成各种数学计算和电路计算。
本次专业基础实践的题目是利用聚类算法对数据进行分类,可用性很强。
聚类分析又称群分析,它是研究(样品或指标)分类问题的一种统计分析方法,同时也是数据挖掘的一个重要算法。
聚类分析是由若干模式组成的,通常,模式是一个度量的向量,或者是多维空间中的一个点。
聚类分析以相似性为基础,在一个聚类中的模式之间比不在同一聚类中的模式之间具有更多的相似性。
K-means算法是一种经典的聚类算法。
第2章MATLAB语言概述
2.1MATLAB语言的发展
MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。
它将数值分析、矩形计算、视化以线性动态线性系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多领域一面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
Matlab的图标如图2-1所示。
图1Matlab图标
20世纪70年代,美国新墨西哥大学计算机科学系主任为了减轻学生编程的负担,用F0RTRAN编写了最早的MATLAB。
MATLAB原名是来源于MATrixLABoratory,即矩阵实验室的意思。
1984年由Little、Moler、SteveBangert合作成立了的MathWorks公司正式把MATLAB推向市场。
到20世纪90年代,MATLAB已成为国际控制界的标准计算软件。
1984年推出的最早的一版MATLAB1.0,之后又不断的完善,相继在1986年推出MATLAB2.0,1987年MATLAB3.0,1992年MATLAB4.0一直到了2004年推出MATLAB7.0.1,以及现在2012年最新版本的MATLAB8.0,可见其软件的发展和更新的速度是非常快的。
MATLAB是矩阵实验室(MatrixLaboratory)之意。
除具备卓越的数值计算能力外,它还提供了专业水平的符号计算,文字处理,可视化建模仿真和实时控制等功能。
经过不断完善MATLAB已经发展成为适合多学科,多种工作平台的功能强大大大型软件。
成为线性代数,自动控制理论,数理统计,数字信号处理,时间序列分析,动态系统仿真等高级课程的基本教学工具。
MATLAB的工作界面如图2-2所示。
图2Matlab的工作界面
此外MATLAB和Mathematica、Maple并称为三大数学软件。
作为一个跨平台的软件,MATLAB已推出Unix、Windows、Linux和Mac等十多种操作系统下的版本,大大方便了在不同操作系统平台下的研究工作。
另外MATLAB可以进行矩阵的运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB的基本运算单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,因此用MATLAB来处理运算问题要比C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优秀软件的优点,导致了MATLAB成为了一个非常强大的数学软件。
2.2MATLAB语言的特点
(1)拥有强大的计算能力
MATLAB具有强大的数值计算能力,能够完成任意精度的数值计算。
MATLAB是一个包含大量计算算法的集合,MATLAB中有着丰富用户常用的函数库供用户调用,并且用户也可以根据自己需要来编写自己所需的函数库。
MATLAB的这些函数集包括从最简单最基本的函数到诸如矩阵,特征向量、快速傅立叶变换的复杂函数。
这些函数能够快速解决的很多使用的问题,比如矩阵的运算、线性方程和微分方程的求解符号运算、傅立叶变换和数据的统计分析,以及实际工程中各种变换与计算。
(2)丰富的应用工具箱
由于MATLAB实用性很强,应用于各个领域之中。
为此在不同的领域的MATLAB应用中,MATLAB开发出很多各领域中实用的工具箱来满足不同领域人员的需要。
用户可以直接使用工具箱学习、应用和评估不同的方法而不需要自己编写代码。
目前,MATLAB已经把工具箱延伸到了科学研究和工程应用的诸多领域,诸如数据采集、数据库接口、概率统计、样条拟合、优化算法、偏微分方程求解、神经网络、小波分析、信号处理、图像处理、系统辨识、控制系统设计、LMI控制、鲁棒控制、模型预测、模糊逻辑、金融分析、地图工具、非线性控制设计、实时快速原型及半物理仿真、嵌入式系统开发、定点仿真、DSP与通讯、电力系统仿真等,用户都可以在工具箱(Toolbox)来进行快速的运用,十分方便。
(3)一维以及多维图像的处理
MATLAB能够快速而又精准的做出各种函数的一维以及多维的图像,可以将向量和矩阵用图形表现出来,并且可以对图形进行标注和打印。
MALAB图像处理功能可以在一个FORTRAN程序中完成可视化计算。
在二维以及多维的图像处理中,不仅具有很强的立体感和逼真感。
此外在MATLAB中还有一些对于其他软件所没有的还具有图像的色彩,光度处理甚至是四维的数据的表现,而且在MATLAB中还可以由用户添加图形与对话,MATLAB也有相应的功能函数,保证了用户不同层次的要求。
总之,MATLAB中提供了很多丰富的绘图命令,很方便就可以实现数据的可视化。
(4)MATLAB编程功能
MATLAB具有程序的结构控制、函数调用、数据结构、输入输出,面向对象等程序设计语言特征,编程简单且效率高。
MATLAB可以利用MATLAB编译器和C/C数学库以及图形库,将自己的MATLAB程序自动转换为独立于MATLAB运行的C和C语言的代码。
允许用户编写可以和MATLAB进行交互的C语言程序。
另外,MATLAB网页服务程序还容许在Web应用中使用自己的MATLAB数学和图形程序。
此外MATLAB还具有一套程序扩展系统和一组称之为工具箱的特殊应用子程序。
其中工具箱是MATLAB函数的子程序库,每一个工具箱都是为某一类学科专业和应用而定制的,主要包括信号处理、控制系统、神经网络、模糊逻辑、小波分析和系统仿真等方面的应用。
可见MATLAB的程序功能是多维的并且操作方便。
2.3MATLAB的典型应用
MATLAB的应用领域十分广阔,典型的应用举例如下:
(1)数据分析
(2)数值与符号计算;
(3)工程与科学绘图;
(4)控制系统设计;
(5)航天工业;
(6)汽车工业;
(7)生物医学工程;
(8)语音处理;
(9)图像与数字信号处理;
(10)财务、金融分析;
(11)建模、仿真及样机开发;
(12)新算法研究开发;
(13)图形用户界面设计。
MATLAB的应用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。
附加的工具箱(单独提供的专用MATLAB函数集)扩展了MATLAB环境,以解决这些应用领域内特定类型的问题。
第3章聚类算法及K-means的应用
3.1K-means算法的介绍
3.1.1K-means算法的基本原理
K-means算法是一种经典的聚类算法,在模式识别中得到了广泛的应用,基于K-means的变种算法有很多,模糊K-means、分层K-means等。
K-means和应用于混合高斯模型的受限EM算法是一致的。
高斯混合模型广泛用于数据挖掘、模式识别、机器学习、统计分析。
K-means的迭代步骤可以看成E步和M步,E:
固定参数类别中心向量重新标记样本,M:
固定标记样本调整类别中心向量。
K均值只考虑(估计)了均值,而没有估计类别的方差,所以聚类的结构比较适合于特征协方差相等的类别。
K-means是一种聚类算法,这种算法是依赖于点的邻域来决定哪些点应该分在一个组中。
当一堆点都靠的比较近,那这堆点应该是分到同一组。
使用K-means,可以找到每一组的中心点。
聚类算法并不局限于2维的点,也可以对高维的空间(3维,4维,等等)的点进行聚类,任意高维的空间都可以。
图3聚类的效果图
上图中的彩色部分是一些二维空间点。
上图中已经把这些点分组了,并使用了不同的颜色对各组进行了标记。
这就是聚类算法要做的事情。
3.1.2K-means算法的实现
一、从D中随机取k个元素,作为k个簇的各自的中心。
二、分别计算剩下的元素到k个簇中心的相异度,将这些元素分别划归到相异度最低的簇。
三、根据聚类结果,重新计算k个簇各自的中心,计算方法是取簇中所有元素各自维度的算术平均数。
四、将D中全部元素按照新的中心重新聚类。
五、重复第4步,直到聚类结果不再变化。
将结果输出
这个算法的输入是:
①点的数据(这里并不一定指的是坐标,其实可以说是向量)
②K,聚类中心的个数(即要把这一堆数据分成几组)
所以,在处理之前,要决定将要把这一堆数据分成几组,即聚成几类。
把相应的输入数据,传入K-means算法后,当K-means算法运行完后,该算法的输出是:
①标签(每一个点都有一个标签,因为最终任何一个点,总会被分到某个类,类的id号就是标签)
②每个类的中心点。
标签,是表示某个点是被分到哪个类了。
假如用彩色图像进行聚类,那么向量就可以是(b,g,r)。
初始的类的中心点是随机产生的。
如上图的红色点所示,是本文随机产生的初始点。
注意观察那两个离得比较近的类,它们几乎要混合在一起,看看算法是如何将它们分开的。
类的初始中心点是随机产生的。
算法会不断迭代来矫正这些中心点,并最终得到比较靠近真实中心点的一组中心点。
当然,最终的结果不一定就是真实的那一组中心点,算法会尽量向真实的靠近。
每个点(除了中心点的其他点)都计算与每个中心点的距离,选出一个距离最小的,那么该点就归属于该类。
每一个中心center(i)点都有它的“管辖范围”,由于这个中心点不一定是这个管辖范围的真正中心点,所以要重新计算中心点,如果重新计算的中心点new_center(i)与原来的中心点center(i)的距离大于一定的阈值(该阈值可以设定),那么认为算法尚未收敛,使用new_center(i)代替center(i),重新聚类;否则,认为算法已经收敛,则new_center(i)就是最终的中心点。
3.2K-means的程序设计
3.2.1K-means函数的调用方法
K-means聚类算法采用的是将N*P的矩阵X划分为K个类,使得类内对象之间的距离最大,而类之间的距离最小。
使用方法:
Idx=Kmeans(X,K)
[Idx,C]=Kmeans(X,K)
[Idc,C,sumD]=Kmeans(X,K)
[Idx,C,sumD,D]=Kmeans(X,K)
各输入输出参数介绍:
X---N*P的数据矩阵
K---表示将X划分为几类,为整数
Idx---N*1的向量,存储的是每个点的聚类标号
Ctrs---K*P的矩阵,存储的是K个聚类质心位置
sumD---1*K的和向量,存储的是类间所有点与该类质心点距离之和
D---N*K的矩阵,存储的是每个点与所有质心的距离
[┈]=Kmeans(┈,‘Param1’,‘Val1’,‘Param2’,‘Val2’,┈)
其中参数Param1、Param2等,主要可以设置为如下:
1、‘Distance’---距离测度
‘sqEuclidean’---欧氏距离
‘cityblock’---绝对误差和,又称L1
‘cosine’---针对向量
‘correlation’---针对有时序关系的值
‘Hamming’---只针对二进制数据
2、’Start’---初始质心位置选择方法
‘sample’---从X中随机选取K个质心点
‘uniform’---根据X的分布范围均匀的随机生成K个质心
‘cluster’---初始聚类阶段随机选取10%的X的子样本(此方法初始使用‘sample’方法)
3、‘Replicates’---聚类重复次数,为整数。
3.2.2Matlab程序及仿真
1、Matlab程序代码
程序中随机生成了150个点,并选取K的值为3,讲这些点分为3类,分别用红、绿、蓝三种颜色表示。
[Idx,Ctrs,SumD,D]表示选取欧式距离来进行聚类,[Idx1,Ctrs1,SumD1,D1]表示选取绝对误差和来进行聚类。
详细程序见附录。
图4脚本编辑器中的代码
2、程序运行结果
该聚类算法对两种不同的距离参数分别进行了5次聚类中心的计算,最后给出了两种距离参数的质心位置Ctrs和Ctrs1和每类聚点与该类质心的距离总和SumD和SumD1。
图5代码运行结果
3、程序仿真图
图6不同距离参数的效果图
第4章程序结果分析及总结
4.1分析方法
点估计、区间估计、回归分析、假设检验、聚类分析、判别分析、因素分析和主成分
析等。
4.2结果分析
由程序运行的结果可以看出,在两种不同的距离参数下对点的聚类中心质点是不同的根据生成的图可以观察到聚类所分成的三类在点的数量上有细微的差别。
这反映出用K-means算法在进行模式识别的分类计算中,距离参数选取的不同会影响分类的结果,具体采用哪一种距离参数得靠试验来选定。
第5章心得体会
本次课程设计内容丰富,涉及的知识面较广。
在设计前期,通过查找资料为设计准备,使我对所学专业方面的许多知识又温习了一遍,许多以前很模糊、很孤立的部分知识通过这次设计得以贯穿,而且掌握得更加地稳固了;此外,通过这次课程设计,在软件编程方面,使我了解到了自己的许多不足之处,通过查找参考资料逐渐熟悉了以前有关于MATLAB的编程知识。
在之前信号与系统的学习以及完成实验的过程中,已经使用过MATLAB,对其有了一些基础的了解和认识。
通过这次的课程设计使我进一步了解了信号的产生,采样及频谱分析的方法。
以及其中产生信号和绘制信号的基本命令和一些基础编程语言。
让我感受到只有在了解课本知识的前提下,才能更好的应用这个工具,并且熟练的应用MATLAB也可以很好的加深我对课程的理解,方便我的思维。
这次课程设计使我了解了MATLAB的使用方法,提高了自己的分析和动手实践能力。
同时我相信,进一步加强对MATLAB的学习与研究对我今后的学习将会起到很大的帮助。
但在设计过程中也出现了不少问题,设计前期在利用MATLAB软件工具对程序进行编译时,由于其中有些标点符号问题。
除了这些之外,还有编程上的逻辑问题,但最终都一个模块一个模块认真分析,最终解决了问题,将模块的程序连在一起,最终结果可以成功运行并仿真出波形图。
通过这次课程设计,我不仅加深了对数字信号处理理论的理解,将理论很好地应用到实际当中去,通过分部完成程序将程序分为几个部分完成,然后再将程序整合在一起,每部分可以进行独立编程。
这次设计中我也自己认真独立思考,了解了每一步的程序编程,对于数字信号处理的有关知识有了进一步认识和理解,自己之后需要多多注重锻炼自己的动手能力,讲所学到的知识运用到实际中,加深自己对于知识的理解。
学习就是一个了解疑惑,进而解惑的过程。
这次课程设计就是提供了这样一个机会,发现自己知识漏洞,与同学老师探讨进行解惑的的机会。
通过这次课程设计实践,我更深刻的了解了MATLAB的运用,重新复习了相关知识,对课本上的知识有了更深的理解。
致谢
在这次课程设计的撰写过程中,我得到了许多人的帮助。
首先我要感谢我的老师在课程设计上给予我的指导、提供给我的支持和帮助,这是我能顺利完成这次设计的主要原因,更重要的是老师帮我解决了许多技术上的难题,让我能把系统做得更加完善。
在此期间,我不仅学到了许多新的知识,而且也开阔了视野,提高了自己的设计能力。
同时,在课程设计中,老师严谨的治学态度、丰富渊博的知识、敏锐的学术思维、精益求精的工作态度以及侮人不倦的师者风范是我终生学习的楷模,老师们的高深精湛的造
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Matlab kmeans 实现 算法