模糊聚类分析实验报告Word文档格式.docx
《模糊聚类分析实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《模糊聚类分析实验报告Word文档格式.docx(16页珍藏版)》请在冰点文库上搜索。
x8=(66,45,65,55,34,32)
建立相似矩阵,并用传递闭包法进行模糊聚类。
2解决步骤:
建立原始数据矩阵
设论域
为被分类对象,每个对象又有
个指标表示其性状,
,
由此可得原始数据矩阵。
于是,得到原始数据矩阵为
其中
表示第
个分类对象的第
个指标的原始数据,其中m=6,n=8。
2.2样本数据标准化
2.2.1对上述矩阵进行如下变化,将数据压缩到[0,1],使用方法为平移极差变换和最大值规格化方法。
(1)平移极差变换:
显然有
,而且也消除了量纲的影响。
(2)最大值规格化:
2.2.2使用Matlab实现代码:
function[x_zuida,x_pingyi]=bzh(x)
%函数功能:
标准化矩阵
[m,n]=size(x);
B=max(x);
B1=max(x)-min(x);
Bm=min(x);
fori=1:
n
x1(:
i)=x(:
i)/B(i);
%最大值规格化
x2(:
i)=(x(:
i)-Bm(i))/B1(i);
%平移极差标准化
end
x_zuida=x1
x_pingyi=x2
2.2.3样本数据标准化后结果如图所示:
图一最大值规格化
图二平移极差标准化
2.3构造模糊相似矩阵
2.3.1根据各分类对象的不同指标的标准化数据,计算分类对象间的相似程度rij,建立模糊相似矩阵R,该操作又称标定,计算标定的方法很多,这里使用最大最小法和算术平均最小法。
(1)最大最小法:
(2)算术平均最小法:
2.3.2使用Matlab实现代码:
function[R1,R2]=bd(x)
标定
m
forj=1:
fork=1:
qx(k)=min(x(i,k),x(j,k));
%取小
qd(k)=max(x(i,k),x(j,k));
%取大
end
R1(i,j)=sum(qx)/sum(qd);
%最大最小法
R2(i,j)=2*sum(qx)/(sum(x(i,:
))+sum(x(j,:
)));
%算术平均最小法
ifi==j
R1(i,j)=1;
R2(i,j)=1;
end
R_zuidazuixiao=R1
R_suanshu=R2
2.3.4将最大规格化后的数据进行构造模糊相似矩阵如图所示:
图三最大最小法构造模糊相似矩阵
图四算术平均法造构造模糊相似矩阵
2.4建立模糊等价矩阵
2.4.1根据标定所得的矩阵,只是一个模糊相似矩阵
,不一定具有传递性,为了进行分类,还需要将
改造成等价矩阵
。
采用平方法计算传递闭包:
经过有限次运算后存在k使
,于是
即为所求的模糊等价矩阵。
2.4.2使用Matlab实现代码:
function[tr]=chuandi(x)
求传递闭包
R=x;
a=size(R);
B=zeros(a);
flag=0;
whileflag==0
fori=1:
a
forj=1:
fork=1:
a
B(i,j)=max(min(R(i,k),R(k,j)),B(i,j));
%R与R内积,先取小再取大
ifB==R
flag=1;
else
R=B;
%循环计算R传递闭包
tr=B;
2.4.3对最大最小法构造模糊的相似矩阵求传递闭包结果如图所示:
图五最大最小法构造模糊相似矩阵的传递闭包
图六算术平均法造构造模糊相似矩阵的传递闭包
2.5聚类分析
2.5.1得到模糊等价矩阵
后,可在适当水平
上截取
,将模糊等价矩阵中大于值
的数归为一类。
2.5.2使用Matlab实现求截矩阵代码:
function[M,N]=julei(tR1)
求出lamda截矩阵
tR=tR1;
lamda=unique(tR);
%取A矩阵不同元素构成的向量,来确定阈值
L=length(lamda);
lamda=sort(lamda,'
descend'
);
L
tR=tR1;
lamda(i)
tR(find(tR>
=lamda(i)))=1;
%令大于lamda的为1
tR(find(tR<
lamda(i)))=0;
%令小于lamda的为0
tR
2.5.3对最大最小法构造模糊相似矩阵的传递闭包求出截矩阵,然后进行聚类,聚类结果如下:
(1)当
时,这8种产品分为8类{x1},{x2},{x3},{x4},{x5},{x6},{x7},{x8}。
图七
时的截矩阵
(2)当
时,这8种产品分为7类{x1},{x2},{x3},{x4,x5},{x6},{x7},{x8}。
图八
(3)当
时,这8种产品分为6类{x1},{x2,x3},{x4,x5},{x6},{x7},{x8}。
图九
(4)当
时,这8种产品分为5类{x1},{x2,x3},{x4,x5,x8},{x6},{x7}。
图十
(5)当
时,这8种产品分为4类{x1},{x2,x3},{x4,x5,x6,x8},{x7}。
图十一
(6)当
时,这8种产品分为3类{x1},{x2,x3,x7},{x4,x5,x6,x8}。
图十二
(7)当
时,这8种产品分为2类{x1},{x2,x3,x7,x4,x5,x6,x8}。
图十三
(8)当
时,这8种产品分为1类{x1,x2,x3,x7,x4,x5,x6,x8}。
图十四
2.5动态聚类图
根据所求得的传递闭包,再让
由大变小,就可形成动态聚类图。
2.5.2使用Matlab实现代码:
function[M,N]=juleitu(tR)
画动态聚类图
%取A矩阵不同元素构成的向量,来确定阈值
M=1:
L;
fori=L-1:
-1:
1%获得分类情况:
对元素分类进行排序
[m,n]=find(tR==lamda(i));
N{i,1}=n;
N{i,2}=m;
tR(m
(1),:
)=0;
mm=unique(m);
N{i,3}=mm;
len=length(find(m==mm
(1)));
depth=length(find(m==mm
(2)));
index1=find(M==mm
(1));
MM=[M(1:
index1-1),M(index1+depth:
L)];
index2=find(MM==mm
(2));
M=M(index1:
index1+depth-1);
M=[MM(1:
index2-1),M,MM(index2:
end)];
M=[1:
M;
ones(1,L)];
h=(max(lamda)-min(lamda))/L;
figure
text(L,1,sprintf('
x%d'
M(2,L)));
text(0,1,sprintf('
%3.4f'
1));
text(0,(1+min(lamda))/2,sprintf('
(1+min(lamda))/2));
text(0,min(lamda),sprintf('
min(lamda)));
holdon
每一个子类的元素
m=N{i,2};
n=N{i,1};
mm=N{i,3};
k=find(M(2,:
)==mm
(1));
l=find(M(2,:
)==mm
(2));
x1=M(1,k);
y1=M(3,k);
x2=M(1,l);
y2=M(3,l);
x=[x1,x1,x2,x2];
M(3,[k,l])=lamda(i);
M(1,[k,l])=sum(M(1,[k,l]))/length(M(1,[k,l]));
y=[y1,lamda(i),lamda(i),y2];
plot(x,y);
text(i,1,sprintf('
M(2,i)));
text(M(1,k
(1)),lamda(i)+h*0.1,sprintf('
lamda(i)));
axis([0L+1min(lamda)max(lamda)])
axisoff
holdoff
2.5.1动态聚类图如图所示:
图十五动态聚类图
实验心得:
通过这次实验,让我了解到模糊矩阵的一些基本知识,同时也让我了解到了模糊关系,然后也让我学会应用模糊聚类分析。
同时也让我更加了解对Matlab的操作,特别是关于矩阵的操作命令。
附录:
x=[373812161312;
697374226417;
738649276839;
575864846328;
385665856227;
655564152648;
655615426535;
664565553432];
x_zuida=[];
x_pingyi=[];
R_zuidazuixiao=[];
R_suanshu=[];
[x_zuida,x2]=bzh(x);
[R_zuidazuixiao,R_suanshu]=bd(x_zuida);
tR_zuidazuixiao=chuandi(R_zuidazuixiao)
tR_suanshu=chuandi(R_suanshu)
juleitu(tR_zuidazuixiao)
julei(tR_zuidazuixiao)