聚类分析论文matlab
聚类分析论文matlab
本文重点是展示如何用Matlab来进行聚类分析。如果有需要解答的问题请留言,笔者会尽其所能地回答。
内容
展示如何使用MATLAB进行聚类分析
生成随机二维分布图形,三个中心
K均值聚类
分层聚类
重新调用K均值法
将分类的结果展示出来
运用高斯混合分布模型进行聚类分析
通过AIC准则寻找最优的分类数
展示如何使用MATLAB进行聚类分析
分别运用分层聚类、K均值聚类以及高斯混合模型来进行分析,然后比较三者的结果
生成随机二维分布图形,三个中心
% 使用高斯分布(正态分布)
% 随机生成3个中心以及标准差
s = rng(5,'v5normal');
mu = round((rand(3,2)-0.5)*19)+1;
sigma = round(rand(3,2)*40)/10+1;
X = [mvnrnd(mu(1,:),sigma(1,:),200); ...
mvnrnd(mu(2,:),sigma(2,:),300); ...
mvnrnd(mu(3,:),sigma(3,:),400)];
% 作图
P1 = figure;clf;
scatter(X(:,1),X(:,2),10,'ro');
title('研究样本散点分布图')
K均值聚类
% 距离用传统欧式距离,分成两类
[cidx2,cmeans2,sumd2,D2] = kmeans(X,2,'dist','sqEuclidean');
P2 = figure;clf;
[silh2,h2] = silhouette(X,cidx2,'sqeuclidean');
从轮廓图上面看,第二类结果比较好,但是第一类有部分数据表现不佳。有相当部分的点落在0.8以下。
分层聚类
eucD = pdist(X,'euclidean');
clustTreeEuc = linkage(eucD,'average');
cophenet(clustTreeEuc,eucD);
P3 = figure;clf;
[h,nodes] = dendrogram(clustTreeEuc,20);
set(gca,'TickDir','out','TickLength',[.002 0],'XTickLabel',[]);
可以选择dendrogram显示的结点数目,这里选择20 。结果显示可能可以分成三类
重新调用K均值法
改为分成三类
[cidx3,cmeans3,sumd3,D3] = kmeans(X,3,'dist','sqEuclidean');
P4 = figure;clf;
[silh3,h3] = silhouette(X,cidx3,'sqeuclidean');
图上看,比前面的结果略有改善。
将分类的结果展示出来
P5 = figure;clf
ptsymb = {'bo','ro','go',',mo','c+'};
MarkFace = {[0 0 1],[.8 0 0],[0 .5 0]};
hold on
for i =1:3
clust = find(cidx3 == i);
plot(X(clust,1),X(clust,2),ptsymb{i},'MarkerSize',3,'MarkerFace',MarkFace{i},'MarkerEdgeColor','black');
plot(cmeans3(i,1),cmeans3(i,2),ptsymb{i},'MarkerSize',10,'MarkerFace',MarkFace{i});
end
hold off
运用高斯混合分布模型进行聚类分析
分别用分布图、热能图和概率图展示结果 等高线
% 等高线
options = statset('Display','off');
gm = (X,3,'Options',options);
P6 = figure;clf
scatter(X(:,1),X(:,2),10,'ro');
hold on
ezcontour(@(x,y) pdf(gm,[x,y]),[-15 15],[-15 10]);
hold off
P7 = figure;clf
scatter(X(:,1),X(:,2),10,'ro');
hold on
ezsurf(@(x,y) pdf(gm,[x,y]),[-15 15],[-15 10]);
hold off
view(33,24)
热能图
cluster1 = (cidx3 == 1);
cluster3 = (cidx3 == 2);
% 通过观察,K均值方法的第二类是gm的第三类
cluster2 = (cidx3 == 3);
% 计算分类概率
P = posterior(gm,X);
P8 = figure;clf
plot3(X(cluster1,1),X(cluster1,2),P(cluster1,1),'r.')
grid on;hold on
plot3(X(cluster2,1),X(cluster2,2),P(cluster2,2),'bo')
plot3(X(cluster3,1),X(cluster3,2),P(cluster3,3),'g*')
legend('第 1 类','第 2 类','第 3 类','Location','NW')
clrmap = jet(80); colormap(clrmap(9:72,:))
ylabel(colorbar,'Component 1 Posterior Probability')
view(-45,20);
% 第三类点部分概率值较低,可能需要其他数据来进行分析。
% 概率图
P9 = figure;clf
[~,order] = sort(P(:,1));
plot(1:size(X,1),P(order,1),'r-',1:size(X,1),P(order,2),'b-',1:size(X,1),P(order,3),'y-');
legend({'Cluster 1 Score' 'Cluster 2 Score' 'Cluster 3 Score'},'location','NW');
ylabel('Cluster Membership Score');
xlabel('Point Ranking');
通过AIC准则寻找最优的分类数
高斯混合模型法的最大好处是给出分类好坏的标准
AIC = zeros(1,4);
NlogL = AIC;
GM = cell(1,4);
for k = 1:4
GM{k} = (X,k);
AIC(k)= GM{k}.AIC;
NlogL(k) = GM{k}.NlogL;
end
[minAIC,numComponents] = min(AIC);
按AIC准则给出的最优分类数为: 3 对应的AIC值为: 8647.63
后记
(1)pluskid指出K均值算法的初值对结果很重要,但是在运行时还没有发现类似的结果。也许Mathworks对该算法进行过优化。有时间会仔细研究下代码,将结果放上来。
转载仅供参考,版权属于原作者
聚类分析算法论文
聚类分析算法论文
聚类分析又称群分析,它是研究(样品或指标)分类问题的一种统计分析方法,同时也是数据挖掘的一个重要算法。下面是我分享给大家的聚类分析算法论文,欢迎阅读。
一、引言
聚类分析算法是给定m维空间R中的n个向量,把每个向量归属到k个聚类中的某一个,使得每一个向量与其聚类中心的距离最小。聚类可以理解为:类内的相关性尽量大,类间相关性尽量小。聚类问题作为一种无指导的学习问题,目的在于通过把原来的对象集合分成相似的组或簇,来获得某种内在的数据规律。聚类分析的基本思想是:采用多变量的统计值,定量地确定相互之间的亲疏关系,考虑对象多因素的联系和主导作用,按它们亲疏差异程度,归入不同的分类中一元,使分类更具客观实际并能反映事物的内在必然联系。也就是说,聚类分析是把研究对象视作多维空间中的许多点,并合理地分成若干类,因此它是一种根据变量域之间的相似性而逐步归群成类的方法,它能客观地反映这些变量或区域之间的内在组合关系。盐矿区系统是一个多层次、复杂的大系统,涉及诸多模糊、不确定的因素。平顶山市盐矿区的经济分类是以整个平顶山市的所有盐矿区为研究对象,以各盐矿区为基本单元,以经济为中心,以发展战略和合理布局为目标进行经济类型区划。其基本原则是:平顶山市的盐矿区资源开发、利用的相对一致性;自然、经济、社会条件的一致性;保持一定行政地域单元的相对稳定性。现行的平顶山市盐矿区行政划分不能反映出各个盐矿区的共同点,有必要通过模糊聚类分析将那些经济实际状况相似的铁矿区归类,剖析、发现各况矿区的差异,对症下药,为制定发展对策提供依据。
二、建立指标体系
1、确定分类指标进行经济区划分,应考虑的指标因素是多种多样的。既要以岩盐矿资源储量为主,又要适当考虑岩盐质量和勘察阶段和开发利用状况;既要有直接指标,又要有间接指标;既要考虑矿区发展的现状,又要考虑矿区发展的过程和矿区发展的未来方向。参考有关资料,结合专家意见,我们确定了对平顶山市盐矿区进行经济区划分的指标。如表1所示。表中列举了具体指标及各指标的原始数据(数据来源于河南省2006年矿产资源储量简表)。表1盐矿区经济划分指标体系及指标数据注:表中N表示缺失数据,勘察阶段1、2、3分别表示:初步勘探、详细普查、详细勘探,利用状况1~7分别表示:近期不宜进一步工作、可供进一步工作、近期难以利用、推荐近期利用、计划近期利用、基建矿区、开采矿区。
2、转换指标数据由于不同变量之间存在不同量纲由于不同变量之间存在不同量纲、不同数量级,为使各个变量更具有可比性,有必要对数据进行转换。目前进行数据处理的方法大致有三种,即标准化、极差标准化和正规化。为便于更直观的比较各市之间同一指标的数值大小,我们采用了正规化转换方式。其计算公式为:为了方便叙述,做如下设定:设Xi(i=1,2,3,…,21)为具体指标层中第i个评价指标的值,Pi(i=1,2,3,…,21)为第i个指标正规化后的值,0≤Pi≤1,Xs,i(Xs,i=Xmax-Xmin),为第i个评价指标的标准值,Xmax为最大值,Xmin为最小值。(1)对于越高越好的`指标①Xi≥Xmax,则Pi=1;②Xi≤Xmin,则Pi=0;③Xmin 三、聚类分析 1、聚类步骤(Stage).从1~3表示聚类的先后顺序。 2、个案合并(ClusterCombined)。表示在某步中合并的个案,如第一步中个案1叶县田庄盐矿段和个案2叶县马庄盐矿段合并,合并以后用第一项的个案号表示生成的新类。 3、相似系数(Coefficients).据聚类分析的基本原理,个案之间亲密程度最高即相似系数最接近于1的,最先合并。因此该列中的系数与第一列的聚类步骤相对应,系数值从小到大排列。 4、新类首次出现的步骤(StageClusterFirstAppears)。对应于各聚类步骤参与合并的两项中,如果有一个是新生成的类(即由两个或两个以上个案合并成的类),则在对应列中显示出该新类在哪一步第一次生成。如第三步中该栏第一列显示值为1,表示进行合并的两项中第一项是在第一步第一次生成的新类。如果值为O,则表示对应项还是个案(不是新类)。 5、新类下次出现步骤(NextStage)。表示对应步骤生成的新类将在第几步与其他个案或新类合并。如第一行的值是11,表示第一步聚类生成的新类将在第11步与其他个案或新类合并。 6、解析图DendrogramusingAverageLinkage(BetweenGroups)RescaledDistanceClusterCombine聚类树状图(方法:组间平均连接法)图清晰的显示了聚类的全过程。他将实际距离按比例调整到0~25之间,用逐级连线的方式连接性质相近的个案或新类,直至并未一类。在该图上部的距离标尺上根据需要(粗分或细分)选定一个划分类的距离值,然后垂直标尺划线,该垂线将与水平连线相交,则相交的交点数即为分类的类别数,相交水平连线所对应的个案聚成一类。例如,选标尺值为5,则聚为3类:叶县田庄盐段、叶县马庄盐矿段为一类,叶县娄庄盐矿、叶县五里堡盐矿段为一类,叶县姚寨盐矿为一类。若选标尺值为10,则聚为2类:叶县田庄盐段、叶县马庄盐矿段为一类,叶县娄庄盐矿、叶县五里堡盐矿段、叶县姚寨盐矿为一类。 四、结论 对平顶山市5个盐矿区进行经济区划分,究竟划分为几个区合适,既不是越多越好,也不是越少越好。划分经济区的目的,就是要根据各盐矿经济区资源特点、勘察、开发的不同,分类指导经济活动,使人们的经济活动更加符合当地的实际,使各经济区能充分发挥各自的优势,做到扬长避短,趋利避害,达到投人少、产出多,创造良好的经济效益和社会效益之目的。分区太多,就失去了分区的意义,分区太少,则分类指导很难做到有的放矢。综合以上聚类分析结果,我们可以得出三个方案。其中两个方案比较合适,可供选择。方案一:(当比例尺为5时,分为3类)叶县田庄盐段、叶县马庄盐矿段为一类,叶县娄庄盐矿、叶县五里堡盐矿段为一类,叶县姚寨盐矿为一类。从聚类分析中看出平顶山市盐矿区分类图方案一。方案二:(当比例尺为10时,分为2类)叶县田庄盐段、叶县马庄盐矿段为一类,叶县娄庄盐矿、叶县五里堡盐矿段、叶县姚寨盐矿为一类。从聚类分析中看出平顶山市盐矿区分类图方案二。平顶山市盐矿区分类图方案2聚类分析的原理就是将矿石质量、资源储量、勘查阶段、利用状况相近或相类似的矿区聚合在一起,其分析结果也是直观易见的。在此结合平顶山市实际行政区划以及矿山企业特征我们对铁矿区划分做一个调整使其理论与实际能够结合的更紧密使其更好的指导实践。 1、叶县田庄盐段、叶县马庄盐矿段为一类,这一类属于矿床规模相当,资源储量接近,勘查开发阶段接近,利用程度相当,故,可以分为一类。 2、叶县娄庄盐矿、叶县五里堡盐矿段为一类,这一类属于勘查开发阶段处于同一阶段。 3、叶县姚寨盐矿为一类,这一类属于储量较高,盐矿品位较高,故其勘察开采规划有别于其它两类。总的说来,运用聚类分析是基本成功的,大部分的分类是符合实际的。综合以上论述盐矿区划分如下表所示:当然聚类分析有其优点也有其缺点:(1)优点:聚类分析模型的优点就是直观,结论形式简明。(2)缺点:在样本量较大时,要获得聚类结论有一定困难。由于相似系数是根据被试的反映来建立反映被试问内在联系的指标,而实践中有时尽管从被试反映所得出的数据中发现他们之间有紧密的关系,但事物之间却无任何内在联系,此时,如果根据距离或相似系数得出聚类分析的结果,显然是不适当的,但是,聚类分析模型本身却无法识别这类错误。 聚类分析的概念主要是来自多元统计分析,例如,考虑二维坐标系上有散落的许多点,这时,需要对散点进行合理的分类,就需要聚类方面的知识。模糊聚类分析方法主要针对的是这样的问题:对于样本空间P中的元素含有多个属性,要求对其中的元素进行合理的分类。最终可以以聚类图的形式加以呈现,而聚类图可以以手式和自动生成两种方式进行,这里采用自动生成方式,亦是本文的程序实现过程中的一个关键环节。 这里所实现的基本的模糊聚类的主要过程是一些成文的方法,在此简述如下: 对于待分类的一个样本集U=,设其中的每个元素有m项指标,则可以用m维向量描述样本,即:ui=(i=1,2,...,n)。则其相应的模糊聚类按下列步骤进行:1) 标准化处理,将数据压缩至(0-1)区间上,这部分内容相对简单,介绍略。(参[1])2) 建立模糊关系:这里比较重要的环节之一,首先是根据逗距离地或其它进行比较的观点及方法建立模糊相似矩阵,主要的逗距离地有:Hamming 距离: d(i,j)=sum(abs(x(i,k)-x(j,k))) | k from 1 to m (| k from 1 to m表示求和式中的系数k由1增至m,下同)Euclid 距离: d(i,j)=sum((x(i,k)-x(j,k))^2) | k from 1 to m 非距离方法中,最经典的就是一个夹角余弦法: 最终进行模糊聚类分析的是要求对一个模糊等价矩阵进行聚类分析,而由相似矩阵变换到等价矩阵,由于相似矩阵已满足对称性及自反性,并不一定满足传递性,则变换过程主要进行对相似矩阵进行满足传递性的操作。使关系满足传递性的算法中,最出名的,就是Washall算法了,又称传递闭包法(它的思想在最短路的Floyd算法中亦被使用了)。 算法相当简洁明了,复杂度稍大:O(log2(n)*n^3),其实就是把一个方阵的自乘操作,只不过这里用集合操作的交和并取代了原先矩阵操作中的*和+操作,如下:(matlab代码)%--washall enclosure algorithm--%unchanged=0;while unchanged==0 unchanged=1; %--sigma:i=1:n(combine(conj(cArr(i,k),cArr(k,j)))) for i=1:cArrSize for j=1:cArrSize mergeVal=0; for k=1:cArrSize if(cArr(i,k)<=cArr(k,j)&&cArr(i,k)>mergeVal) mergeVal=cArr(i,k); elseif(cArr(i,k)>cArr(k,j)&&cArr(k,j)>mergeVal) mergeVal=cArr(k,j); end end if(mergeVal>cArr(i,j)) copyCArr(i,j)=mergeVal; unchanged=0; else copyCArr(i,j)=cArr(i,j); end end end %--copy back--% for i=1:cArrSize for j=1:cArrSize cArr(i,j)=copyCArr(i,j); end endend 简单的聚类分析程序,你可以参考一下的。matlab中聚类算法
如何用matlab进行文本聚类
x=[1 2;2.5 4.5;2 2;4 1.5;4 2.5];
y=pdist(x);
% dism=squareform(y);计算各个变量之间的距离
z=linkage(y);
figure(2);
dendrogram(z);
t1=cluster(z,2)
上一篇:开题报告论文创新点模板
下一篇:论文创新点和不足怎么写