23. 模糊聚类分析原理及实现
聚类分析,就是用数学方法研究和处理所给定对象,按照事物间的相似性进行区分和分类的过程。
传统的聚类分析是一种硬划分,它把每个待识别的对象严格地划分到某个类中,具有非此即彼的性质,这种分类的类别界限是分明的。
随着模糊理论的建立,人们开始用模糊的方法来处理聚类问题,称为模糊聚类分析。由于模糊聚类得到了样本数与各个类别的不确定性程度,表达了样本类属的中介性,即建立起了样本对于类别的不确定性的描述,能更客观地反映现实世界。
本篇先介绍传统的两种(适合数据量较小情形,及理解模糊聚类原理):基于择近原则、模糊等价关系的模糊聚类方法。
(一)预备知识
一、模糊等价矩阵
定义1 设R=(rij)nn为模糊矩阵,I为n阶单位矩阵,若R满足
i) 自反性:I≤R (等价于rii =1);
ii) 对称性:RT=R;
则称R为模糊相似矩阵,若再满足
iii) 传递性:R2≤R(等价于)
则称R为模糊等价矩阵。
定理1 设R为n阶模糊相似矩阵,则存在一个最小的自然数k(k=lamda(m)))=1;
y=X;
例3某地区设有11个雨量站,其分布如图所示:
10年来各雨量站测得的年降雨量表如下:
现因经费问题,希望撤销几个雨量站,问撤销哪些雨量站而不会太多地减少降雨信息?
分析:对11个雨量站进行模糊聚类,同一类的只需保留一个即可。比如,已知该市决定撤销6个只保留5个雨量站,则模糊聚类为5类。
代码:
load data;
%数据归一化
[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达到最小(最优模糊聚类)放到下一篇。