首页 > 编程知识 正文

k均值聚类算法 matlab,matlab方差分析

时间:2023-05-03 07:07:36 阅读:58283 作者:408

用Matlab编程实现

采用Matlab中的几种基本矩阵计算方法,通过自行编程实现聚类算法,这里只讨论基于最短距离规则的聚类方法。

调用函数:

min1.m——计算矩阵的最小值,并返回具有最小值的行和列以及值的大小

min2.m——比较两个数字的大小并返回小值

std1.m——用极差的标准化方法对矩阵进行标准化

DS1 .用m ——绝对值距离法求距离矩阵

cluster.m——采用最短距离聚类法进行聚类分析

print1.m——调用每个子函数并显示聚类结果

聚类分析算法

设距离矩阵为向量、次数a,矩阵中的最大值为max,矩阵上的三角元素等于max

聚类次数=a-1,按照以下步骤进行a-1循环:

求出变更后的矩阵的次数,设为c

求出矩阵的最小值,返回有最小值的行e、列f和值的大小g

向forl=1:c、vector(c1,l )分配值,生成新的类

设第c 1列要素、第e行和第f行的所有要素、第e列和第f列的所有要素为max

源程序包括:

%std1.m,用极差的标准化方法标准化矩阵

函数TD=STD1(向量)

max=max (载体); 对%列求最大值

min=min (向量;

[a,b ]=size (向量); %矩阵的大小,a为行数,b为列数

for i=1:a

forj=1:b

STD(I,j )=) vector(I,j )-min (j ) )/) max(j )-min (j );

结束

结束

%ds1.m,用绝对值法求距离

函数d=DS1 (vector;

[a,b ]=size (向量);

d=Zeros(a;

for i=1:a

forj=1:a

for k=1:b

d(I,j )=d ) I,j ) ABS ) vector ) I,k )-vector(j,k ) )

结束

结束

结束

fprintf (绝对值距离矩阵如下。 (n );

是disp(d )

%min1.m,求矩阵中的最小值,返回矩阵数及其值

功能[ v1,v2,V3]=min1(vector ); %v1是行数,v2是列数,v3是其值

[v,v2 ]=min (min (向量' );

[v,v1 ]=min (min (向量);

v3=min(min ) vector );

%min2.m,比较两个数量的大小,并返回较小的值

函数v1=min (v2,v3 );

if v2v3

v1=v3;

else

v1=v2;

结束

%cluster.m,最短距离聚类法

函数结果=集群(vector;

[a,b ]=size (向量);

max=max(max )载体);

for i=1:a

for j=i:b

vector(I,j )=max;

结束

结束;

fork=1:(B-1) )

[c,d ]=size (向量);

fprintf (第%g次群集:(n ),k );

[e,f,g ]=min1(向量);

fprintf (最小值=%g,将第%g区和第%g区合并为G%gnn )、g、e、f、c 1 );

forl=1:c

ifl=min2(e,f ) )。

向量(f (f (C1,l )=min2)向量(e,l ),向量(f,l ) );

else

vector (l (l,l )=min2) vector (l,e ),vector (l,f );

结束

结束;

Vector(1:c 1,C1 )=max;

vector(1:c1,e )=max;

Vector(1:c1,f )=max;

Vector(e,1:c 1)=max;

Vector(f,1:c 1)=max;

结束

%print1,调用每个子函数

函数打印=打印1 (文件名,a,b ); %a是地区数,b是指标数

FID=fopen (文件名称,' r ' ) ) )。

Ector=FSCANF(FID,“%g”,[粗暴的冷风];

fprintf (标准化结果如下。 n ) ) )。

v1=

std1(vector)

v2=ds1(v1);

cluster(v2);

%输出结果

print1('fname',9,7)

2.直接调用Matlab函数实现

2.1调用函数

层次聚类法(Hierarchical Clustering)的计算步骤:

①计算n个样本两两间的距离{dij},记D

②构造n个类,每个类只包含一个样本;

③合并距离最近的两类为一新类;

④计算新类与当前各类的距离;若类的个数等于1,转到5);否则回3);

⑤画聚类图;

⑥决定类的个数和类;

Matlab软件对系统聚类法的实现(调用函数说明):

cluster                  从连接输出(linkage)中创建聚类

clusterdata              从数据集合(x)中创建聚类

dendrogram             画系统树状图

linkage                 连接数据集中的目标为二元群的层次树

pdist                 计算数据集合中两两元素间的距离(向量)

squareform             将距离的输出向量形式定格为矩阵形式

zscore                  对数据矩阵 X 进行标准化处理

各种命令解释

⑴ T =clusterdata(X, cutoff)

其中X为数据矩阵,cutoff是创建聚类的临界值。即表示欲分成几类。

以上语句等价与以下几句命令:

Y=pdist(X,’euclid’)

Z=linkage(Y,’single’)

T=cluster(Z,cutoff)

以上三组命令调用灵活,可以自由选择组合方法!

⑵ T =cluster(Z, cutoff)

从逐级聚类树中构造聚类,其中Z是由语句likage产生的(n-1)×3阶矩阵,cutoff是创建聚类的临界值。

⑶ Z = linkage(Y)           Z = linkage(Y, 'method')

创建逐级聚类树,其中Y是由语句pdist产生的n(n-1)/2 阶向量,’method’表示用何方法,默认值是lldxhd距离(single)。有’complete’——最长距离法;‘average’——类平均距离;‘centroid’——重心法 ;‘ward‘——递增平方和等。

⑷ Y = pdist(X)         Y = pdist(X,'metric')

计算数据集X中两两元素间的距离, ‘metric’表示使用特定的方法,有lldxhd距离‘euclid’、标准lldxhd距离‘SEuclid’、无语的大炮距离‘mahal’、wldhb距离‘wsdny‘ 等。

⑸ H = dendrogram(Z)    H =dendrogram(Z, p)

由likage产生的数据矩阵z画聚类树状图。P是结点数,默认值是30。

2.2举例说明

设某地区有八个观测点的数据,样本距离矩阵如表1所示,根据最短距离法聚类分析。

%最短距离法系统聚类分析

X=[7.90 39.77 8.49 12.94 19.27 11.05 2.04 13.29;

7.6850.37 11.35 13.3 19.25 14.59 2.75 14.87;

9.4227.93 8.20 8.14 16.17 9.42 1.55 9.76;

9.1627.98 9.01 9.32 15.99 9.10 1.82 11.35;

10.0628.64 10.52 10.05 16.18 8.39 1.96 10.81];

BX=zscore(X); %标准化数据矩阵

Y=pdist(X)   %用lldxhd距离计算两两之间的距离

D=squareform(Y)  %lldxhd距离矩阵

Z = linkage(Y)   %最短距离法

T = cluster(Z,3) %等价于{T=clusterdata(X,3) }

find(T==3)  %第3类集合中的元素

[H,T]=dendrogram(Z)     %画聚类图

聚类谱系图如图1所示:

图1 聚类谱

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。