聚类算法心得体会【篇一:聚类算法总结】聚类算法总结一、概述聚类,就是把整个数据集分成不同的簇,并且要使簇与簇之间的区别尽可能的大,而簇内的数据的差异尽可能的小。
簇是数据样本的集合,聚类分析使得每簇内部的样本之间的相关性比其他簇中样本之间的相关性更紧密,即簇内的任意两个样本之间具有较高的相似度,而属于不同簇的两个样本间具有较高的相异度。
相异度可以根据描述样本的属性值来计算,样本间的“距离”是最常采用的度量标准。
聚类分析(cluster analysis)又称群分析,是根据“物以类聚”的道理,对样品或指标进行分类的一种多元统计分析方法,同时也是数据挖掘的一个重要算法。
通过聚类分析,可以在没有任何模式可供参考或依循,即在没有先验知识的情况下,将大量数据样本按各自的特性来进行合理的分类。
在开始聚类之前,用户并不知道要把数据集分成几个簇,也不知道划分的具体标准,在聚类分析时数据集的特征是未知的,聚类算法的任务正是要发现这些特征,并把具有相同特征的数据样本聚在一起。
聚类与分类有相似之处,都是将数据进行分组,但两者又有本质的区别。
分类中组(类别)是事先已经定义好的,但聚类中的组(在聚类分析中称为“簇”)不是预先定义的,而是根据实际数据的特征按照数据之间的相似性来定义的。
二、聚类算法的性能评价指标数据挖掘对聚类的典型要求如下:(1)可伸缩性:当聚类对象由几百上升到几百万,我们希望最后的聚类结果的准确度能一致。
(2)处理不同类型属性的能力:有些聚类算法,其处理对象的属性的数据类型只能为数值类型,但是实际应用场景中,我们往往会遇到其他类型的数据,比如二元数据,分类数据等等。
当然,在处理过程我们是可以将这些其他类型的数据预处理成数值型数据的,但是在聚类效率上或者聚类准确度上往往会有折损。
(3)发现任意形状的类簇:因为许多聚类算法是用距离(eg:欧几里得距离或者曼哈顿距离)来量化对象之间的相似度的,基于这种方式,我们往往只能发现相似尺寸和密度的球状类簇或者成为凸形类簇。
但是,类簇的形状可能是任意的。
(4)对聚类算法初始化参数的知识需求的最小化:很多算法在分析过程中需要用户提供一定的初始参数,比如期望的类簇个数,类簇初始质点的设定。
聚类结果对这些参数是十分敏感的。
这不仅加重了用户的负担,也非常影响聚类结果的准确性。
三、聚类算法分类聚类分析的研究已经有很多年的历史,研究成果主要集中在基于距离和基于相似度的方法上,也产生了大量的聚类算法,大体上,主要的聚类算法可以划分为如下几类:基于划分聚类算法;基于层次聚类算法;基于密度聚类算法;基于网格的聚类算法;基于神经网络的聚类算法;基于统计学的聚类算法以及模糊聚类算法。
1.基于划分聚类算法(partition clustering)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 实验环境以及所用到的主要软件windows vista netbeans6.5.1 weka3.6 matlab r2009a 2 实验内容描述聚类是对数据对象进行划分的一种过程,与分类不同的是,它所划分的类是未知的,故此,这是一个“无指导的学习” 过程,它倾向于数据的自然划分。
其中聚类算法常见的有基于层次方法、基于划分方法、基于密度以及网格等方法。
本文中对近年来聚类算法的研究现状与新进展进行归纳总结。
一方面对近年来提出的较有代表性的聚类算法,从算法思想。
关键技术和优缺点等方面进行分析概括;另一方面选择一些典型的聚类算法和一些知名的数据集,主要从正确率和运行效率两个方面进行模拟实验,并分别就同一种聚类算法、不同的数据集以及同一个数据集、不同的聚类算法的聚类情况进行对比分析。
最后通过综合上述两方面信息给出聚类分析的研究热点、难点、不足和有待解决的一些问题等。
实验中主要选择了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.1 k均值聚类算法3.1.1 k均值聚类算法理论k均值算法是一种硬划分方法,简单流行但其也存在一些问题诸如其划分结果并不一定完全可信。
k均值算法的划分理论基础是min??k?axk?vii?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均值算法的初始化if max(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;elsev = param.c;c = size(param.c,1);index=randperm(n);v0=x(index(1:c)+1,:);v0 = v0 + 1e-10;enditer = 0;接着是迭代求解直到满足要求的解或者达到最大的迭代值while prod(max(abs(v - v0))),iter = iter +1;v0 = v;for i = 1:c这里是用来计算欧氏距离dist(:,i) = sum([(x - repmat(v(i,:),n,1)).^2],2);end下面将分类结果赋值[m,label] = min(dist);distout=sqrt(dist);下面计算分类中心for i = 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));if param.visclfhold onplot(v(:,1),v(:,2),ro)colors={r. gx b+ ys md cv k. r* g* b* y* m* c* k* }; for i=1:c index = find(label == i);if ~isempty(index)dat=x(index,:);plot(dat(:,1),dat(:,2),colors{i})endendhold offpause(0.1)endend保存求解结果result.cluster.v = v;result.data.d = distout;计算划分矩阵f0=zeros(n,c);for i=1:cindex=find(label == i);f0(index,i)=1;endresult.data.f=f0;result.iter = iter;result.cost = j;3.1.4 实验配置实验过程配置比较简单只需按照如下介绍即可。