Matlab学习系列23 模糊聚类分析原理及实现Word文档下载推荐.docx
《Matlab学习系列23 模糊聚类分析原理及实现Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《Matlab学习系列23 模糊聚类分析原理及实现Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。
![Matlab学习系列23 模糊聚类分析原理及实现Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2022-11/29/156ea6a9-aa90-491c-b6c8-31c71662f912/156ea6a9-aa90-491c-b6c8-31c71662f9121.gif)
意义:
将模糊等价矩阵转化为等价的布尔矩阵,可以得到有限论域上的普通等价关系,而等价关系是可以分类的。
因此,当λ在[0,1]上变动时,由Aλ得到不同的分类。
若λ1<λ2,则Aλ1≥Aλ2,从而由Aλ2确定的分类是由Aλ1确定的分类的加细。
当λ从1递减变化到0时,Aλ的分类由细变粗,逐渐归并,形成一个分级聚类树。
例1设U={u1,u2,u3,u4,u5},对给定的U上的模糊等价关系
让λ从1到0变化,观察分类过程。
(1)当λ=1时,
分类结果为5类:
(每行代表一类,1代表对应元素在该类)
{u1},{u2},{u3},{u4},{u5}
(2)当λ=0.8时,
分类结果为4类:
{u1,u3},{u2},{u4},{u5}
(3)当λ=0.6时,
分类结果为3类:
{u1,u3},{u2},{u4,u5}
(4)当λ=0.5时,
分类结果为2类:
{u1,u3,u4,u5},{u2}
(4)当λ=0.4(R中的最小值)时,
分类结果为1类:
{u1,u2,u3,u4,u5}
整个动态分类过程如下:
(二)基于择近原则的模糊聚类
择近原则就是利用贴近度来实现分类操作,贴近度用来衡量两个模糊集A和B的接近程度,用N(A,B)表示。
贴近度越大,表明二者越接近。
设论域有限或者在一定区间,即U={u1,u2,…,un}或U=[a,b],常用的贴近度有以下三种:
(1)海明贴近度
(2)欧氏贴近度
(3)格贴近度
.
Matlab实现:
格贴近度的实现函数fuz_closing.m
functiony=fuz_closing(A,B,type)
%要求A与B列数相同的行向量
[m,n]=size(A);
switchtype
case1%海明贴近度
y=1-sum(abs(A-B))/n;
case2%欧氏贴近度
y=1-(sum(A-B).^2)^(1/2)/sqrt(n);
case3%格贴近度
y1=max(min(ones(m,n)-A,ones(m,n)-B));
%ones(m,n)-A等于A^c
y2=max(min(A,B));
y=min(y1,y2);
end
例2设某产品的质量等级分为5级,其中一级有5种评判因素u1,u2,u3,u4,u5.每一等级的模糊集为
B1={0.50.50.60.40.3}
B2={0.30.30.40.20.2}
B3={0.20.20.30.10.1}
B4={0.10.10.20.10}
B5={0.10.10.10.10}
假设某产品各评判因素的值为A={0.40.30.20.10.2},问该产品属于哪个等级?
代码:
A=[0.40.30.20.10.2];
B=[0.50.50.60.40.3;
0.30.30.40.20.2;
0.20.20.30.10.1;
0.10.10.20.10;
0.10.10.10.10];
fori=1:
5
haiming(i)=fuz_closing(A,B(i,:
),1);
oushi(i)=fuz_closing(A,B(i,:
),2);
ge(i)=fuz_closing(A,B(i,:
),3);
haiming
oushi
ge
运行结果:
haiming=0.78000.92000.90000.86000.8400
oushi=0.50810.91060.86580.68700.6422
ge=0.40000.30000.20000.20000.1000
可见样本A与各等级的格贴近度分别为0.4,0.3,0.2,0.2,0.1,故可认为该产品属于B1等级。
若按令两种贴近度判断,该产品属于B2等级。
(三)基于模糊等价关系的模糊聚类
一、算法步骤
1.样本数据归一化
设X={x1,x2,…,xn}为要分类的n个样本,每个样本有m个指标,即
xi={xi1,xi2,…,xim},i=1,2,..,n
得到原始数据矩阵X=(xij)n×
m.
由于不同指标的数据量纲不同,为了使数据能够比较,要先对X做归一化处理。
2.建立模糊相似矩阵R
先建立样本xi与xj相似程度rij,进而构造模糊相似矩阵R=(rij)n×
n建立rij常用的方法有:
(1)相似系数法
①夹角余弦法:
②相关系数法:
(2)距离法
一般取rij=1-c(d(xi,xj))α,其中c和α为适当选取的参数,使得
0≤rij≤1.常用的距离有:
①海明距离:
②欧氏距离:
③切比雪夫距离:
(3)贴近度法
①最大最小法:
②算术平均最小法:
③几何平均最小法:
3.求出R的传递闭包t(R)
即改造相似关系为等价关系:
令
再令
…,直到满足
与Rl相等,即为t(R),仍记为R.
4.选取合适的λ,利用λ-截矩阵Rλ进行分类(参考例1)。
二、Matlab实现
求模糊相似矩阵R的函数:
fuz_distance.m
functionR=fuz_distance(x,type)
%x为归一化的数据矩阵,type选择计算相似程度的方法
%返回模糊相似矩阵R
[n,m]=size(x);
%距离法的选择参数c和a,需要根据具体情况修改以保证R(i,j)属于[0,1]
c=0.1;
a=1;
fori=1:
n
forj=1:
switchtype
case1%夹角余弦法R(i,j)=(x(i,:
)*x(j,:
)'
)/(norm(x(i,:
),2)*norm(x(j,:
),2));
case2%相关系数法
Dxi=abs(x(i,:
)-mean(x(i,:
)));
Dxj=abs(x(j,:
)-mean(x(j,:
R(i,j)=(Dxi*Dxj'
)/(norm(Dxi,2)*norm(Dxj,2));
case3%海明距离法
d=sum(abs(x(i,:
)-x(j,:
R(i,j)=1-c*d^a;
case4%欧氏距离法
d=norm(x(i,:
case5%切比雪夫距离法
d=max(abs(x(i,:
case6最大最小(贴近度)法R(i,j)=sum(min([x(i,:
);
x(j,:
)]))/sum(max([x(i,:
)]));
case7算术平均最小(贴近度)法R(i,j)=2*sum(min([x(i,:
)]))/sum(x(i,:
)+x(j,:
));
case8%几何平均最小(贴近度)法R(i,j)=sum(min([x(i,:
)]))/sum(sqrt(x(i,:
).*x(j,:
end
end
求R的传递闭包t(R)的函数:
tran_R.m
function[B,k]=tran_R(R)
%R为模糊相似矩阵,循环构造满足传递性的t(R)
%k为满足R^2k=R^k的最小的自然数k
n=length(R);
B=zeros(n,n);
flag=0;
k=1/2;
whileflag==0
B=fco(R,R);
%做模糊合成运算
k=2*k;
ifB==R
flag=1;
else
R=B;
%循环计算R传递闭包
上面的函数tran_R.m调用函数矩阵模糊合成算子函数:
fco.m
functionB=fco(Q,R)
%实现模糊合成算子的计算,要求Q的列数等于R的行数
[n,m]=size(Q);
[m,l]=size(R);
B=zeros(n,l);
fork=1:
l
B(i,k)=max(min([Q(i,:
R(:
k)'
]));
求t(R)的λ-截矩阵的函数:
fuz_lamda.m
functiony=fuz_lamda(X,m)
%用λ-截矩阵将样本分成m类,m≤总样本数
lamda=unique(X)'
;
%根据R中的值取λ值
%unique函数取矩阵不重复元素组成向量并从小到大排好序
X(find(X<
lamda(m)))=0;
X(find(X>
=lamda(m)))=1;
y=X;
例3某地区设有11个雨量站,其分布如图所示:
10年来各雨量站测得的年降雨量表如下:
现因经费问题,希望撤销几个雨量站,问撤销哪些雨量站而不会太多地减少降雨信息?
分析:
对11个雨量站进行模糊聚类,同一类的只需保留一个即可。
比如,已知该市决定撤销6个只保留5个雨量站,则模糊聚类为5类。
loaddata;
%数据归一化
[X,ps]=mapminmax(data'
0,1);
X=X'
%选择计算相似程度的方法
type=3;
%c=0.1,a=1,此时也称绝对值减数法
%求模糊相似矩阵R0
R0=fuz_distance(X,type)
%将模糊相似矩阵R0改造成模糊等价矩阵R
[R,k]=tran_R(R0)
%求将样本分成8类的λ-截矩阵
R_lamda=fuz_lamda(R,8)
运行结果及说明:
归一化后的数据矩阵X:
模糊相似矩阵R0:
由R0改造成的模糊等价矩阵R:
k=8说明R16=R8.
将样本分为5类的λ-截矩阵R_lamda:
可以判断5类分别是:
{x1,x7}{x2,x4,x5,x6}{x3,x9}{x8,x11}{x10}
注:
对于这类C均值模糊聚类问题,也可以直接调用Matlab自带的模糊聚类函数fcm.m求解。
调用方式:
[center,U,obj_fcn,]=fcm(data,cluster_n)
其中,data为归一化后的样本数据,每一行是一个样本;
cluster_n为聚类数;
center返回最终的聚类中心矩阵;
U为最终的模糊分区矩阵;
obj_fcn为迭代过程中的目标函数值(越小越好)。
(X为前面已归一化的样本数据)
[center,U,obj_fcn]=fcm(X,5)
maxU=max(U);
index1=find(U(1,:
)==maxU);
%第一类
index2=find(U(2,:
%第二类
index3=find(U(3,:
%第三类
index4=find(U(4,:
%第四类
index5=find(U(5,:
%第五类
class1=X(index1,:
)%第一类中的样本数据
class2=X(index2,:
)%第二类中的样本数据
class3=X(index3,:
)%第三类中的样本数据
class4=X(index4,:
)%第四类中的样本数据
class5=X(index5,:
)%第五类中的样本数据
运行结果略,对比class1-class5与X,得到分类结果与前文相同。
另外,分为5类的obj_fcn=1.0578,如何选取合适的分类数,使得obj_fcn达到最小(最优模糊聚类)放到下一篇。