聚类算法心得体会.docx

上传人:b****5 文档编号:7163720 上传时间:2023-01-21 格式:DOCX 页数:10 大小:27.30KB
下载 相关 举报
聚类算法心得体会.docx_第1页
第1页 / 共10页
聚类算法心得体会.docx_第2页
第2页 / 共10页
聚类算法心得体会.docx_第3页
第3页 / 共10页
聚类算法心得体会.docx_第4页
第4页 / 共10页
聚类算法心得体会.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

聚类算法心得体会.docx

《聚类算法心得体会.docx》由会员分享,可在线阅读,更多相关《聚类算法心得体会.docx(10页珍藏版)》请在冰豆网上搜索。

聚类算法心得体会.docx

聚类算法心得体会

聚类算法心得体会

【篇一:

聚类算法总结】

聚类算法总结

一、概述聚类,就是把整个数据集分成不同的簇,并且要使簇与簇之间的区别尽可能的大,而簇内的数据的差异尽可能的小。

簇是数据样本的集合,聚类分析使得每簇内部的样本之间的相关性比其他簇中样本之间的相关性更紧密,即簇内的任意两个样本之间具有较高的相似度,而属于不同簇的两个样本间具有较高的相异度。

相异度可以根据描述样本的属性值来计算,样本间的“距离”是最常采用的度量标准。

聚类分析(clusteranalysis)又称群分析,是根据“物以类聚”的道理,对样品或指标进行分类的一种多元统计分析方法,同时也是数据

挖掘的一个重要算法。

通过聚类分析,可以在没有任何模式可供参考或依循,即在没有先验知识的情况下,将大量数据样本按各自的特性来进行合理的分类。

在开始聚类之前,用户并不知道要把数据集分成几个簇,也不知道划分的具体标准,在聚类分析时数据集的特征是未知的,聚类算法的任务正是要发现这些特征,并把具有相同特征的数据样本聚在一起。

聚类与分类有相似之处,都是将数据进行分组,但两者又有本质的区别。

分类中组(类别)是事先已经定义好的,但聚类中的组(在聚类分析中称为“簇”)不是预先定义的,而是根据实际数据的特征按照数据之间的相似性来定义的。

二、聚类算法的性能评价指标数据挖掘对聚类的典型要求如下:

(1)可伸缩性:

当聚类对象由几百上升到几百万,我们希望最后的聚类结果的准确度能一致。

(2)处理不同类型属性的能力:

有些聚类算法,其处理对象的属性的数据类型只能为数值类型,但是实际应用场景中,我们往往会遇到其他类型的数据,比如二元数据,分类数据等等。

当然,在处理过程我们是可以将这些其他类型的数据预处理成数值型数据的,但是在聚类效率上或者聚类准确度上往往会有折损。

(3)发现任意形状的类簇:

因为许多聚类算法是用距离(eg:

欧几

里得距离或者曼哈顿距离)来量化对象之间的相似度的,基于这种

方式,我们往往只能发现相似尺寸和密度的球状类簇或者成为凸形类簇。

但是,类簇的形状可能是任意的。

(4)对聚类算法初始化参数的知识需求的最小化:

很多算法在分析过程中需要用户提供一定的初始参数,比如期望的类簇个数,类簇初始质点的设定。

聚类结果对这些参数是十分敏感的。

这不仅加重了用户的负担,也非常影响聚类结果的准确性。

三、聚类算法分类聚类分析的研究已经有很多年的历史,研究成果主要集中在基于距离和基于相似度的方法上,也产生了大量的聚类算法,大体上,主要的聚类算法可以划分为如下几类:

基于划分聚类算法;基于层次聚类算法;基于密度聚类算法;基于网格的聚类算法;基于神经网络的聚类算法;基于统计学的聚类算法以及模糊聚类算法。

1.基于划分聚类算法(partitionclustering)

2.基于层次聚类算法

3.基于密度聚类算法

4.基于网格的聚类算法

5.基于神经网络的聚类算法

6.基于统计学的聚类算法

7.模糊聚类——fcm聚类算法

这个和之前的6种聚类算法相比较比较特殊。

1965年美国加州大学柏克莱分校的扎德教授第一次提出了‘集合'的概念。

经过十多年的发展,模糊集合理论渐渐被应用到各个实际应用方面。

为克服非此即彼的分类缺点,出现了以模糊集合论为数学基础的聚类分析。

用模糊数学的方法进行聚类分析,就是模糊聚类分析。

fcm算法是一种以隶属度来确定每个数据点属于某个聚类程度的算法。

该聚类算法是传统硬聚类算法的一种改进。

算法流程如下:

(1)标准化数据矩阵;

(2)建立模糊相似矩阵,初始化隶属矩阵;(3)算法开始迭代,直到目标函数收敛到极小值;

(4)根据迭代结果,由最后的隶属矩阵确定数据所属的类,显示最后的聚类结果。

四、综合性能评价几种常用的聚类算法从可伸缩性、适合的数据类型、高维性(处理高维数据的能力)、异常数据的抗干扰度、聚类形状和算法效率6个方面进行了综合性能评价,评价结果如下所示:

五、目前聚类算法研究的主要内容对聚类进行研究是数据挖掘中的一个热门方向,由于以上所介绍的聚类方法都存在着某些缺点,因此近些年对于聚类分析的研究很多都专注于改进现有的聚类方法或者是提出一种新的聚类方法。

以下将对传统聚类方法中存在的问题以及人们在这些问题上所做的努力做一个简单的总结:

1从以上对传统的聚类分析方法所做的总结来看,不管是k-means方法,还是cure方法,在进行聚类之前都需要用户事先确定要得到的聚类的数目。

然而在现实数据中,聚类的数目是未知的,通常要经过不断的实验来获得合适的聚类数目,得到较好的聚类结果。

2传统的聚类方法一般都是适合于某种情况的聚类,没有一种方法能够满足各种情况下的聚类,比如birch方法对于球状簇有很好的聚类性能,但是对于不规则的聚类,则不能很好的工作;k-medoids方法不太受孤立点的影响,但是其计算代价又很大。

因此如何解决这个问题成为当前的一个研究热点,有学者提出将不同的聚类思想进行融合以形成新的聚类算法,从而综合利用不同聚类算法的优点,在一次聚类过程中综合利用多种聚类方法,能够有效的缓解这个问题。

3随着信息时代的到来,对大量的数据进行分析处理是一个很庞大的工作,这就关系到一个计算效率的问题。

有文献提出了一种基于最小生成树的聚类算法,该算法通过逐渐丢弃最长的边来实现聚类结果,当某条边的长度超过了某个阈值,那么更长边就不需要计算而直接丢弃,这样就极大地提高了计算效率,降低了计算成本。

5目前的许多算法都只是理论上的,经常处于某种假设之下,比如聚类能很好的被分离,没有突出的孤立点等,但是现实数据通常是很复杂的,噪声很大,因此如何有效的消除噪声的影响,提高处理现实数据的能力还有待进一步的提高。

【篇二:

聚类算法分析报告】

学院班级:

学生学号:

学生姓名:

杨阳

同作者:

实验日期:

2010年12月

聚类算法分析研究

1实验环境以及所用到的主要软件

windowsvistanetbeans6.5.1weka3.6matlabr2009a2实验内容描述聚类是对数据对象进行划分的一种过程,与分类不同的是,它所划分的类是未知的,故此,这是一个“无指导的学习”过程,它倾向于数据的自然划分。

其中聚类算法常见的有基于层次方法、基于划分方法、基于密度以及网格等方法。

本文中对近年来聚类算法的研究现状与新进展进行归纳总结。

一方面对近年来提出的较有代表性的聚类算法,从算法思想。

关键技术和优缺点等方面进行分析概括;另一方面选择一些典型的聚类算法和一些知名的数据集,主要从正确率和运行效率两个方面进行模拟实验,并分别就同一种聚类算法、不同的数据集以及同一个数据集、不同的聚类算法的聚类情况进行对比分析。

最后通过综合上述两方面信息给出聚类分析的研究热点、难点、不足和有待解决的一些问题等。

实验中主要选择了k均值聚类算法、fcm模糊聚类算法并以网站下载的iris和wine数据集为基础通过matlab实现对上述算法的实验测试。

然后以wine数据集在学习了解weka软件接口方面的基础后作聚类分析,使用最常见的k均值(即k-means)聚类算法和fcm模糊聚类算法。

下面简单描述一下k均值聚类的步骤。

k均值算法首先随机的指定k个类中心。

然后:

(1)将每个实例分配到距它最近的类中心,得到k个类;

(2)计分别计算各类中所有实例的均值,把它们作为各类新的类中心。

重复

(1)和

(2),直到k个类中心的位置都固定,类的分配也固定。

在实验过程中通过利用weka软件中提供的simplekmeans(也就是k均值聚类算法对wine数据集进行聚类分析,更深刻的理解k均值算法,并通过对实验结果进行观察分析,找出实验中所存在的问题。

然后再在学习了解weka软件接口方面的基础上对weka软件进行一定的扩展以加入新的聚类算法来实现基于weka平台的聚类分析。

3实验过程

3.1k均值聚类算法

3.1.1k均值聚类算法理论

k均值算法是一种硬划分方法,简单流行但其也存在一些问题诸如其划分结果并不一定完全可信。

k均值算法的划分理论基础是min?

?

k?

axk?

vi

i?

1ic2

(1)

其中c是划分的聚类数,ai是已经属于第i类的数据集vi是相应的点到第i类的平均距离,即

vi?

?

nik?

1xkni,xk?

ai

(2)

其中ni表示在数据集ai中的对象数。

3.1.2算法的基本过程

step1:

任意选择k个对象作为初始的类的中心;step2:

repeat;

step3:

根据类中的平均值,将每个数据点(重新)赋给最相近的类;step4:

更新

类的平均值;

step5:

until不再发生变化,即没有对象进行被重新分配时过程结束。

3.1.3算法代码分析

k均值聚类算法的代码分析过程如下首先调用clust_normalize()函数将数据集标准化具体过程如下data=clust_normalize(data,range);

下面是对k均值算法的初始化

ifmax(size(param.c))==1,

c=param.c;

index=randperm(n);

v=x(index(1:

c),:

);v=v+1e-10;v0=x(index(1:

c)+1,:

);v0=v0-1e-10;

else

v=param.c;

c=size(param.c,1);

index=randperm(n);v0=x(index(1:

c)+1,:

);v0=v0+1e-10;

end

iter=0;接着是迭代求解直到满足要求的解或者达到最大的迭代值whileprod(max(abs(v-v0))),

iter=iter+1;

v0=v;

fori=1:

c

这里是用来计算欧氏距离

dist(:

i)=sum([(x-repmat(v(i,:

),n,1)).八2],2);

end

下面将分类结果赋值

[m,label]=min(dist);distout=sqrt(dist);下面计算分类中心fori=1:

cindex=find(label==i);if~isempty(index)v(i,:

)=mean(x(index,:

));elseind=round(rand*n-1);v(i,:

)=x(ind,:

);endf0(index,i)=1;endj(iter)=sum(sum(f0.*dist));ifparam.visclfholdonplot(v(:

1),v(:

2),ro)colors={r.gxb+ysmdcvk.r*g*b*y*m*c*k*};fori=1:

cindex=find(label==i);

if~isempty(index)dat=x(index,:

);plot(dat(:

1),dat(:

2),colors{i})endendholdoffpause(0.1)endend保存求解结果result.cluster.v=v;

result.data.d=distout;计算划分矩阵f0=zeros(n,c);fori=1:

cindex=find(label==i);f0(index,i)=1;

endresult.data.f=f0;result.iter=iter;

result.cost=j;

3.1.4实验配置实验过程配置比较简单只需按照如下介绍即可。

将路径修改为matlab工具箱的相应路径在次是“e:

fuzzclust”如下

在下面选择

path(path,e:

\matlab\toolbox\fuzzclust)选择数据集在实验中选择了iris数据集,因此iris=1哪个数据集只需将相应的值置为1其他两个置为0。

wine=0;

iris=1;wisc=0;ifwineloadwinedat.txtdata=winedat(:

1:

end-1);c=winedat(:

end);

endifirisloadirisdata=iris(:

1:

4);c=zeros(length(data),1);

fori=1:

3c(find(iris(:

4+i)==1))=i;

endendifwiscwisc数据预处理wisc=wk1read(wisconsin.wk1);

ni=9;nt=length(wisc);

data.x=[wisc(:

11)wisc(:

2:

10)];data.x=sortrows(data.x,1);

[i,j]=find(data.x(:

7)~=0);data.x=data.x(i,:

);

[i,j]=find(data.x(:

1)==2);data.x(i,1)=1;

[i,j]=find(data.x(:

1)==4);data.x(i,1)=2;

c=data.x(:

1);data=data.x(:

2:

end);

end

数据标准化data.x=data;data=clust_normalize(data,range);下面的参数在fcm模糊聚类时用到param.m=2;

如下参数是设置分类数即k=3

param.c=3;param.val=1;

【篇三:

各种聚类算法介绍及对比】

一、层次聚类

1、层次聚类的原理及分类

1)层次法(hierarchicalmethods)先计算样本之间的距离。

每次将距离最近的点合并到同一个类。

然后,再计算类与类之间的距离,将距离最近的类合并为一个大类。

不停的合并,直到合成了一个类。

其中类与类的距离的计算方法有:

最短距离法,最长距离法,中间距离法,类平均法等。

比如最短距离法,将类与类的距离定义为类与类之间样本的最短距离。

层次聚类算法根据层次分解的顺序分为:

自下底向上和自上向下,即凝聚的层次聚类算法和分裂的层次聚类算法(agglomerative和divisive),也可以理解为自下而上法(bottom-up)和自上而下法(top-down)。

自下而上法就是一开始每个个体(object)都是一个类,然后根据linkage寻找同类,最后形成一个“类”。

自上而下法就是反过来,一开始所有个体都属于一个“类”,然后根据linkage排除异己,最后每个个体都成为一个“类”。

这两种路方法没有孰优孰劣之分,只是在实际应用的时候要根据数据特点以及你想要的“类”的个数,来考虑是自上而下更快还是自下而上更快。

至于根据linkage判断“类”的方法就是最短距离法、最长距离法、中间距离法、类平均法等等(其中类平均法往往被认为是最常用也最好用的方法,一方面因为其良好的单调性,另一方面因为其空间扩张/浓缩的程度适中)。

为弥补分解与合并的不足,层次合并经常要与其它聚类方法相结合,如循环定位。

2)hierarchicalmethods中比较新的算法有birch(balanced

iterativereducingandclusteringusinghierarchies利用层次方

法的平衡迭代规约和聚类)主要是在数据量很大的时候使用,而且数据类型是numerical。

首先利用树的结构对对象集进行划分,然后

再利用其它聚类方法对这些聚类进行优化;rock(ahierarchical

clusteringalgorithmforcategoricalattributes)主要用在categorical的数据类型上;chameleon(ahierarchicalclusteringalgorithmusingdynamicmodeling)里用到的linkage是knn(k-nearest-neighbor)算法,并以此构建一个graph,chameleon的聚类效果被认为非常强大,比birch好用,但运算复杂度很高,o(n八2)。

2、层次聚类的流程凝聚型层次聚类的策略是先将每个对象作为一个簇,然后合并这些原子簇为越来越大的簇,直到所有对象都在一个簇中,或者某个终结条件被满足。

绝大多数层次聚类属于凝聚型层次聚类,它们只是在簇间相似度的定义上有所不同。

这里给出采用最小距离的凝聚层次聚类算法流程:

(1)将每个对象看作一类,计算两两之间的最小距离;

(2)将距离最小的两个类合并成一个新类;

(3)重新计算新类与所有类之间的距离;

(4)重复

(2)、(3),直到所有类最后合并成一类。

聚类的效果如下图,黑色是噪音点:

另外我们可以看出凝聚的层次聚类并没有类似基本k均值的全局目标函数,没有局部极小问题或是很难选择初始点的问题。

合并的操作往往是最终的,一旦合并两个簇之后就不会撤销。

当然其计算存储的代价是昂贵的。

3、层次聚类的优缺点

优点:

1,距离和规则的相似度容易定义,限制少;2,不需要预先制定聚类数;3,可以发现类的层次关系;4,可以聚类成其它形状缺点:

1,计算复杂度太高;2,奇异值也能产生很大影响;3,算法很可能聚类成链状

r语言中使用hclust(d,method=complete,members=null):

行层次聚类。

d为距离矩阵;method表示类的合并方法,single最短距离法,complete最长距离法,median中间距离法,mcquitty相似法,average类平均法,centroid重心法,ward离差平方和法;members为null或d长度的矢量。

二、划分聚类法k-means基于划分的方法(partition-basedmethods):

其原理简单来说就是,想象你有一堆散点需要聚类,想要的聚类效果就是“类内的点都足够近,类间的点都足够远”。

首先你要确定这堆散点最后聚成几类,然后挑选几个点作为初始中心点,再然后依据预先定好的启发式算法(heuristicalgorithms)给数据点做迭代重置(iterativerelocation),直到最后到达“类内的点都足够近,类间的点都足够远”的目标效果。

partition-basedmethods聚类多适用于中等体量的数据集,但我们也不知道“中等”到底有多“中”,所以不妨理解成,数据集越大,越有可能陷入局部最小。

1、kmeans算法的原理k-means算法以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低。

k-means算法的处理过程如下:

首先,随机地选择k个对象,每个对象初始地代表了一个簇的平均值或中心,即选择k个初始质心;对剩余的每个对象,根据其与各簇中心的距离,将它赋给最近的簇;然后重新计算每个簇的平均值。

这个过程不断重复,直到准则函数收敛,直到质心不发生明显的变化。

通常,采用平方误差准则,误差的平方和sse作为全局的目标函数,即最小化每个点到最近质心的欧几里得距离的平方和。

此时,簇的质心就是该簇内所有数据点的平均值。

选择k个点作为初始质心

repeat将每个点指派到最近的质心,形成k个簇重新计算每个簇的质心

until簇不发生变化或达到最大迭代次数

时间复杂度:

o(tkmn),其中,t为迭代次数,k为簇的数目,m为记录数,n为维数空间复杂度:

o((m+k)n),其中,k为簇的数目,m为记录数,n为维数

k-means算法的详细过程从上图中,我们可以看到,a,b,c,d,e是五个在图中点。

而灰色的点是我们的种子点,也就是我们用来找点群的点。

有两个种子点,所以k=2。

然后,k-means的算法如下:

1随机在图中取k(这里k=2)个种子点。

2然后对图中的所有点求到这k个种子点的距离,假如点pi离种子点si最近,那么pi属于si点群。

(我们可以看到a,b属于上面的种

子点,c,d,e属于下面中部的种子点)③接下来,我们要移动种子点

到属于他的“点群”的中心。

(见图上的第三步)

④然后重复第2)和第3)步,直到,种子点没有移动(我们可以看到图中的第四步上面的种子点聚合了a,b,c,下面的种子点聚合了d,e)。

聚类的效果如下图,折线是历次循环时3个簇的质心的更新轨迹,黑点是初始质心:

我们查看基本k均值算法实现步骤及上面的聚类效果可以发现,该聚类算法将所有数据点都进行了指派,不识别噪音点。

另外选择适当的初试质心是基本k均值过程的关键。

2、k均值的优缺点及分类

优点:

1,简单,易于理解和实现;2,时间复杂度低缺点:

1)kmeans要手工输入类数目,对初始值的设置很敏感;所以有

了k-means++、intelligentk-means、genetick-means;

2)k-means对噪声和离群值非常敏感,所以有了k-medoids和k-medians;

3)k-means只用于numerical类型数据,不适用于categorical类型数据,所以k-modes;

4)k-means不能解决非凸(non-convex)数据,所以有了kernelk-means。

5)k-means主要发现圆形或者球形簇,不能识别非球形的簇。

3、k-means与dbscan的区别

k-means聚类算法的初始点选择不稳定,是随机选取的,这就引起聚类结果的不稳定。

k-means属于动态聚类,往往聚出来的类有点圆形或者椭圆形。

kmeans对于圆形区域聚类效果较好,dbscan基于密度,对于集中区域效果较好。

对于不规则形状,kmeans完全无法用,dbscan可以起到很好的效果。

4、k-means注意问题

1)k如何确定

kmenas算法首先选择k个初始质心,其中k是用户指定的参数,即所期望的簇的个数。

这样做的前提是我们已经知道数据集中包含多少个簇,但很多情况下,我们并不知道数据的分布情况,实际上聚类就是我们发现数据分布的一种手段。

如何有效的确定k值,这里大致提供几种方法:

①与层次聚类结合[2]经常会产生较好的聚类结果的一个有趣策略是,首先采用层次凝聚算法决定结果粗的数目,并找到一个初始聚类,然后用迭代重定位来改进该聚类。

②稳定性方法[3]稳定性方法对一个数据集进行2次重采样产生2个数据子集,再用相同的聚类算法对2个数据子集进行聚类,产生2个具有k个聚类的聚类结果,计算2个聚类结果的相似度的分布情况。

2个聚类结果具有高的相似度说明k个聚类反映了稳定的聚类结构,其相似度可以用来估计聚类个数。

采用次方法试探

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1