Matlab笔记模糊聚类分析原理及实现.docx
- 文档编号:3999846
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:13
- 大小:274KB
Matlab笔记模糊聚类分析原理及实现.docx
《Matlab笔记模糊聚类分析原理及实现.docx》由会员分享,可在线阅读,更多相关《Matlab笔记模糊聚类分析原理及实现.docx(13页珍藏版)》请在冰豆网上搜索。
Matlab笔记模糊聚类分析原理及实现
23.模糊聚类分析原理及实现
聚类分析,就是用数学方法研究和处理所给定对象,按照事物间的相似性进行区分和分类的过程。
传统的聚类分析是一种硬划分,它把每个待识别的对象严格地划分到某个类中,具有非此即彼的性质,这种分类的类别界限是分明的。
随着模糊理论的建立,人们开始用模糊的方法来处理聚类问题,称为模糊聚类分析。
由于模糊聚类得到了样本数与各个类别的不确定性程度,表达了样本类属的中介性,即建立起了样本对于类别的不确定性的描述,能更客观地反映现实世界。
本篇先介绍传统的两种(适合数据量较小情形,及理解模糊聚类原理):
基于择近原则、模糊等价关系的模糊聚类方法。
(一)预备知识
一、模糊等价矩阵
定义1设R=(rij)n×n为模糊矩阵,I为n阶单位矩阵,若R满足
i)自反性:
I≤R(等价于rii=1);
ii)对称性:
RT=R;
则称R为模糊相似矩阵,若再满足
iii)传递性:
R2≤R(等价于
)
则称R为模糊等价矩阵。
定理1设R为n阶模糊相似矩阵,则存在一个最小的自然数k(k 二、模糊矩阵的λ-截矩阵 定义2设A=(aij)n×m为模糊矩阵,对任意的λ∈[0,1],作矩阵 其中, 称为模糊矩阵A的λ-截矩阵。 显然,Aλ为布尔矩阵,且其等价性与与A一致。 意义: 将模糊等价矩阵转化为等价的布尔矩阵,可以得到有限论域上的普通等价关系,而等价关系是可以分类的。 因此,当λ在[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); end 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: n 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,: )-x(j,: ),2); R(i,j)=1-c*d^a; case5%切比雪夫距离法 d=max(abs(x(i,: )-x(j,: ))); R(i,j)=1-c*d^a; case6最大最小(贴近度)法R(i,j)=sum(min([x(i,: );x(j,: )]))/sum(max([x(i,: );x(j,: )])); case7算术平均最小(贴近度)法R(i,j)=2*sum(min([x(i,: );x(j,: )]))/sum(x(i,: )+x(j,: )); case8%几何平均最小(贴近度)法R(i,j)=sum(min([x(i,: );x(j,: )]))/sum(sqrt(x(i,: ).*x(j,: ))); end 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传递闭包 end end 上面的函数tran_R.m调用函数矩阵模糊合成算子函数: fco.m functionB=fco(Q,R) %实现模糊合成算子的计算,要求Q的列数等于R的行数 [n,m]=size(Q); [m,l]=size(R); B=zeros(n,l); fori=1: n fork=1: l B(i,k)=max(min([Q(i,: );R(: k)'])); end end 求t(R)的λ-截矩阵的函数: fuz_lamda.m functiony=fuz_lamda(X,m) %用λ-截矩阵将样本分成m类,m≤总样本数 lamda=unique(X)';%根据R中的值取λ值 %unique函数取矩阵不重复元素组成向量并从小到大排好序 X(find(X 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,: )==maxU);%第二类 index3=find(U(3,: )==maxU);%第三类 index4=find(U(4,: )==maxU);%第四类 index5=find(U(5,: )==maxU);%第五类 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达到最小(最优模糊聚类)放到下一篇。 (注: 文档可能无法思考全面,请浏览后下载,供参考。 可复制、编制,期待你的好评与关注)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Matlab 笔记 模糊 聚类分析 原理 实现