matlab实现Kmeans聚类算法.docx
- 文档编号:29156006
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:17
- 大小:24.72KB
matlab实现Kmeans聚类算法.docx
《matlab实现Kmeans聚类算法.docx》由会员分享,可在线阅读,更多相关《matlab实现Kmeans聚类算法.docx(17页珍藏版)》请在冰豆网上搜索。
matlab实现Kmeans聚类算法
题目:
matlab实现Kmeans聚类算法
姓名
学号
背景知识
1.简介:
Kmeans算法是一种经典的聚类算法,在模式辨别中获取了宽泛的应
用,鉴于Kmeans的变种算法也有好多,模糊Kmeans、分层Kmeans
等。
Kmeans和应用于混淆高斯模型的受限EM算法是一致的。
高斯混淆
模型宽泛用于数据发掘、模式辨别、机器学习、统计剖析。
Kmeans
的迭代步骤能够当作E步和M步,E:
固定参数类型中心向量从头
标志样本,M:
固定标志样本调整类型中心向量。
K均值只考虑(估
计)了均值,而没有预计类其余方差,因此聚类的构造比较适合于
特色协方差相等的类型。
Kmeans在某种程度也能够当作Meanshitf的特别版本,Meanshift
是一种概率密度梯度预计方法(长处:
无需求解出详细的概率密度,
直接求解概率密度梯度。
),因此Meanshift能够用于找寻数据的
多个模态(类型),利用的是梯度上涨法。
在06年的一篇CVPR文
章上,证了然Meanshift方法是牛顿拉夫逊算法的变种。
Kmeans
和EM算法相像是指混淆密度的形式已知(参数形式已知)状况下,
利用迭代方法,在参数空间中搜寻解。
而Kmeans和Meanshift相
似是指都是一种概率密度梯度预计的方法,可是是Kmean采纳的是
特别的核函数(uniformkernel),而与混淆概率密度形式能否已
知没关,是一种梯度求解方式。
k-means是一种聚类算法,这类算法是依靠于点的邻域来决定哪些
点应当分在一个组中。
当一堆点都靠的比较近,那这堆点应当是分
到同一组。
使用k-means,能够找到每一组的中心点。
自然,聚类算法其实不限制于2维的点,也能够对高维的空间(3维,
4维,等等)的点进行聚类,随意高维的空间都能够。
上图中的彩色部分是一些二维空间点。
上图中已经把这些点分组
了,并使用了不一样的颜色对各组进行了标志。
这就是聚类算法要做
的事情。
这个算法的输入是:
1:
点的数据(这里其实不必定指的是坐标,其实能够说是向量)
2:
K,聚类中心的个数(即要把这一堆数据分红几组)
因此,在办理以前,你先要决定将要把这一堆数据分红几组,即聚
成几类。
但其实不是在全部状况下,你都预先就能知道需要把数据聚
成几类的。
但这也其实不意味着使用k-means就不可以办理这类状况,
下文中会有解说。
把相应的输入数据,传入k-means算法后,当k-means算法运转完
后,该算法的输出是:
1:
标签(每一个点都有一个标签,因为最后任何一个点,总会被
分到某个类,类的id号就是标签)
2:
每个类的中心点。
标签,是表示某个点是被分到哪个类了。
比如,在上图中,实质上
有4中“标签”,每个“标签”使用不一样的颜色来表示。
全部黄色
点我们能够用标签0表示,全部橘色点能够用标签1来表示,等等。
在本文中,使用上图的二维坐标(x,y)向量为数据集。
假定我们要将这些点聚成5类,即k=5。
我们能够看出,有3个类离的比较远,有两个类离得比较近,几乎要混淆在一同了。
自然,数据集不必定是坐标,若是你要对彩色图像进行聚类,那么
你的向量就能够是(b,g,r),假如使用的是hsv颜色空间,那还可
以使用(h,s,v),
(h*b,s*g,v*v)
自然必定能够有不一样的组合比如等等。
(b*b,g*r,r*b)
,
在本文中,初始的类的中心点是随机产生的。
如上图的红色点所示,是本文随机产生的初始点。
注意察看那两个离得比较近的类,它们几乎要混淆在一同,看看算法是怎样将它们分开的。
类的初始中心点是随机产生的。
算法会不停迭代来改正这些中心点,并最后获取比较凑近真切中心点的一组中心点。
自然,最后的结果不必定就是真切的那一组中心点,算法会尽量向真切的凑近。
每个点(除了中心点的其余点)都计算与5其中心点的距离,选出一个距离最小的(比如该点与第2其中心点的距离是5个距离中最小的),那么该点就归属于该类.上图是点的归类结果表示图.
经过步骤3后,每一其中心center(i)点都有它的”管辖范围”,由
于这其中心点不必定是这个管辖范围的真切中心点,因此要从头计算中心点,计算的方法有好多种,最简单的一种是,直接计算该管辖
范围内全部点的均值,做为心的中心点new_center(i).
假如从头计算的中心点new_center(i)与本来的中心点center(i)
的距离大于必定的阈值(该阈值能够设定),那么以为算法还没有收
敛,使用new_center(i)取代center(i)(如图,中心点从红色点
转移到绿色点),转步骤3;不然,以为算法已经收敛,则
new_center(i)就是最后的中心点。
此刻,全部的中心都不再挪动,即算法已经收敛。
自然,或许这些中心点还没有达到你要的精度,因为计算这些中心点的正确性,会受初始中心点设置的影响。
因此,假如初始中心设置的很糟糕,那么得出来的结果也会不理想。
能够从K=1开始,而且k值不停的增添,往常,跟着k的增添,类
中的方差会急剧的降落,当k达到必定大的时候,方差的降落会明
显减慢(至于慢道何种程度,能够设阈值),此时,就选用到了最
佳的k值。
假如初始值没设置好,必定也不可以获取理想的聚类成效。
针对这类状况,这里供给两种方法:
随机的选用多组中心点,在每一组中心点上,都把kmeans算法运
行一次。
最后,在选用类间方差最小的一组。
经过设定的选初始值方法(这里供给一种,自然自己也能够去构思其余的方法)
1.在数据集上随机选择一个点,做为第一其中心点;
2:
在数据集上,选用离第一其中心点最远的一个点做为第二其中
心点。
3:
在数据集上,选用离第一个和第二其中心最远的点,做为第三
其中心。
4:
依此计算后续的中心点
2.数据根源描绘
本次数据发掘实验的数据源来自加州大学计算机与信息院,是用于
合成控制图时间序列聚类剖析的一组数据。
数据集中一共包括600组数
据,每一组数据都有60个重量,也就是数据是60维的。
数据一共能够
分红6个聚类,分别是:
1-100Normal(正常)
101-200Cyclic(循环)
201-300Increasingtrend(增添趋向)
301-400Decreasingtrend(减少趋向)
401-500Upwardshift(上涨变化)
501-600Downwardshift(降落变化)
3.数据预办理
因为本数据集的数据维数许多,因此本实验采纳了构造体来储存60维的数据,并使用指针来进行对数据的操作,以提升速度。
在数据预处
理过程中,第一将数据从data文件中读出,后挨次存入构造体数组dataset[600]中。
4.k-means聚类算法
k-means算法接受参数k;而后将预先输入的n个数据对象
区分为k个聚类以便使得所获取的聚类知足:
同一聚类中的对象相
似度较高;而不一样聚类中的对象相像度较小。
聚类相像度是利用各
聚类中对象的均值所获取一个“中心对象”(引力中心)来进行计
算的。
K-means算法是最为经典的鉴于区分的聚类方法,是十大经典
数据发掘算法之一。
K-means算法的基本思想是:
以空间中k个点
为中心进行聚类,对最凑近他们的对象归类。
经过迭代的方法,逐
次更新各聚类中心的值,直至获取最好的聚类结果。
(1)算法思路:
第一从n个数据对象随意选择k个对象作为初始聚类中心;而
关于所剩下其余对象,则依据它们与这些聚类中心的相像度(距离),
分别将它们分派给与其最相像的(聚类中心所代表的)聚类;然后
再计算每个所获新聚类的聚类中心(该聚类中全部对象的均值);不
断重复这一过程直到标准测度函数开始收敛为止。
一般都采纳均方
差作为标准测度函数.k个聚类拥有以下特色:
各聚类自己尽可能
的紧凑,而各聚类之间尽可能的分开。
该算法的最大优势在于简短和迅速。
算法的重点在于初始中心
的选择和距离公式。
(2)算法步骤:
初始化距离K个聚类的质心(随机产生)
计算全部数据样本与每个质心的欧氏距离,将数据样
本加入与其欧氏距离最短的那个质心的簇中(记录其数据样本的编
号)
计算此刻每个簇的质心,进行更新,判断新质心能否
与原质心相等,若相等,则迭代结束,若不相等,回到step2持续
迭代。
Matlab
代码:
function
km(k,A)
%函数名里不要出现“
-”
X=[randn(100,2).*100;
...
randn(100,2).*200;randn(100,2).*300;
...
randn(100,2).*400;randn(100,2).*500;randn(100,2).*600];
opts=statset(
'Display'
'final'
);
[idx,ctrs]=kmeans(X,6,
...
'Distance'
'city'
...
'Replicates'
5,...
'Options'
opts);
plot(X(idx==1,1),X(idx==1,2),
'r.'
'MarkerSize'
12)
hold
on
plot(X(idx==2,1),X(idx==2,2),
'b.'
'MarkerSize'
12)
hold
on
plot(X(idx==3,1),X(idx==3,2),
'm.'
'MarkerSize'
12)
hold
on
plot(X(idx==4,1),X(idx==4,2),
'g.'
'MarkerSize'
12)
hold
on
plot(X(idx==5,1),X(idx==5,2),
'k.'
'MarkerSize'
12)
hold
on
plot(X(idx==6,1),X(idx==6,2),
'c.'
'MarkerSize'
12)
title(
'{\bfKmeans
聚类算法图像}'
)
plot(ctrs(:
1),ctrs(:
2),
'kx'
'MarkerSize'
12,
'LineWidth'
2)
plot(ctrs(:
1),ctrs(:
2),
'ko'
'MarkerSize'
12,'LineWidth'
2)
plot(ctrs(:
1),ctrs(:
2),
'kx'
'MarkerSize'
12,
'LineWidth'
2)
plot(ctrs(:
1),ctrs(:
2),
'kx'
'MarkerSize'
12,
'LineWidth'
2)
plot(ctrs(:
1),ctrs(:
2),
'kx'
'MarkerSize'
12,
'LineWidth'
2)
plot(ctrs(:
1),ctrs(:
2),
'kx'
'MarkerSize'
12,
'LineWidth'
2)
plot(ctrs(:
1),ctrs(:
2),'kx','MarkerSize',12,'LineWidth',2)
legend('Cluster1','Cluster2','Cluster3','Cluster4','Cluster5'
'Cluster6','Centroids','Location','NW')
...
15iterations,totalsumofdistances=188947
28iterations,totalsumofdistances=178709
12iterations,totalsumofdistances=184055
14iterations,totalsumofdistances=182642
12iterations,totalsumofdistances=178357
5.剖析方法
点预计、区间预计、回归剖析、假定查验、聚类剖析、鉴别剖析、
要素剖析和主成分剖析等等。
6.获取的模型的描绘
第一,准备数据,对数据进行预办理,采纳适合的数据构造储存
数据元组,而后设定参数,数据的总量N,维度D,聚类类型数目K,然
后随机产生K个D维的数据作为质心,计算每个数据与质心距离,并加
入所属的簇中,经多次迭代后,质心不变后,获取分类后的结果。
因为
初始化质心是随机的,因此每次运转聚类剖析花销的时间略有不一样,本
实验采纳构造体来储存数据,聚类的操作多应用指针来实现,在选择所
属的簇,并加入簇中,加入的是数据的索引值,提升了效率,在一步中
假如使用指针指向数据能够进一步提升效率。
整体上说算法的运转时间
仍是比较令人满意。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab 实现 Kmeans 算法