搜档网
当前位置:搜档网 › Matlab学习系列23. 模糊聚类分析原理及实现

Matlab学习系列23. 模糊聚类分析原理及实现

Matlab学习系列23. 模糊聚类分析原理及实现
Matlab学习系列23. 模糊聚类分析原理及实现

23. 模糊聚类分析原理及实现

聚类分析,就是用数学方法研究和处理所给定对象,按照事物间的相似性进行区分和分类的过程。

传统的聚类分析是一种硬划分,它把每个待识别的对象严格地划分到某个类中,具有非此即彼的性质,这种分类的类别界限是分明的。

随着模糊理论的建立,人们开始用模糊的方法来处理聚类问题,称为模糊聚类分析。由于模糊聚类得到了样本数与各个类别的不确定性程度,表达了样本类属的中介性,即建立起了样本对于类别的不确定性的描述,能更客观地反映现实世界。

本篇先介绍传统的两种(适合数据量较小情形,及理解模糊聚类原理):基于择近原则、模糊等价关系的模糊聚类方法。

(一)预备知识

一、模糊等价矩阵

定义1设R=(r ij )n ×n 为模糊矩阵,I 为n 阶单位矩阵,若R 满足 i) 自反性:I ≤R (等价于r ii =1); ii) 对称性:R T =R;

则称R 为模糊相似矩阵,若再满足

iii) 传递性:R 2

≤R (等价于1

()n

ik kj ij k r r r =∨∧≤)

则称R 为模糊等价矩阵。

定理1设R 为n 阶模糊相似矩阵,则存在一个最小的自然数k

(k

定义2设A =(a ij )n ×m 为模糊矩阵,对任意的λ∈[0,1], 作矩阵

()

()

ij n m

A a λλ?=

其中,

()1, 0, ij ij

ij a a

a λλλ≥?=?

称为模糊矩阵A 的λ-截矩阵。显然,A λ为布尔矩阵,且其等价性与与A 一致。

意义:将模糊等价矩阵转化为等价的布尔矩阵,可以得到有限论域上的普通等价关系,而等价关系是可以分类的。因此,当λ在[0,1]上变动时,由A λ得到不同的分类。

若λ1<λ2, 则A λ1≥A λ2, 从而由A λ2确定的分类是由A λ1确定的分类的加细。当λ从1递减变化到0时,A λ的分类由细变粗,逐渐归并,形成一个分级聚类树。

例1设U={u 1, u 2, u 3, u 4, u 5}, 对给定的U 上的模糊等价关系

让λ从1到0变化,观察分类过程。 (1) 当λ=1时,

110000 01000 00100 00010 00001

R

??????=??????

????

分类结果为5类:(每行代表一类,1代表对应元素在该类)

{u1}, {u2}, {u3}, {u4}, {u5}

(2) 当λ=0.8时,

0.810100 01000 10100 00010 00001

R

??????=??????

????

分类结果为4类:{u1, u3}, {u2}, {u4}, {u5}

(3) 当λ=0.6时,

0.610100 01000 10100 00011 00011

R

??????=??????

????

分类结果为3类:{u1, u3}, {u2}, {u4, u5}

(4) 当λ=0.5时,

0.510111 01000 10111 10111 10111

R

??????=??????

????

分类结果为2类:{u1, u3, u4, u5}, {u2}

(4) 当λ=0.4(R 中的最小值)时,

0.4

111111111111111111111

1111R ??

??

??

=????

??????

分类结果为1类:{u 1, u 2, u 3, u 4, u 5}

整个动态分类过程如下:

(二)基于择近原则的模糊聚类

择近原则就是利用贴近度来实现分类操作,贴近度用来衡量两个模糊集A 和B 的接近程度,用N (A ,B )表示。贴近度越大,表明二者越接近。

设论域有限或者在一定区间,即U={u 1, u 2, …, u n }或U=[a,b], 常用的贴近度有以下三种: (1) 海明贴近度

1

1(,)1|()()|n

i i i N A B A u B u n ==--∑

1(,)1|()()|d b

i i a

N A B A u B u u b a =---?

(2) 欧氏贴近度

1

2

2

1

(,)1[()()]

n

i i

i

N A B A u B u

=

?

=--?

?

)122

(,)1[()()]d

b

i i

a

N A B A u B u u

=--

?

(3) 格贴近度

(,)()()

c c

N A B A B A B

=∧

其中,()

1

()()

n

i i

i

A B A u B u

=

=∨∧

.

Matlab实现:格贴近度的实现函数fuz_closing.m

function y=fuz_closing(A,B,type)

%要求A与B列数相同的行向量

[m,n]=size(A);

switch type

case 1 %海明贴近度

y=1-sum(abs(A-B))/n;

case 2 %欧氏贴近度

y=1-(sum(A-B).^2)^(1/2)/sqrt(n);

case 3 %格贴近度

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.5 0.5 0.6 0.4 0.3}

B2={0.3 0.3 0.4 0.2 0.2}

B3={0.2 0.2 0.3 0.1 0.1}

B4={0.1 0.1 0.2 0.1 0}

B5={0.1 0.1 0.1 0.1 0}

假设某产品各评判因素的值为A={0.4 0.3 0.2 0.1 0.2}, 问该产品属于哪个等级?

代码:

A=[0.4 0.3 0.2 0.1 0.2];

B=[0.5 0.5 0.6 0.4 0.3;

0.3 0.3 0.4 0.2 0.2;

0.2 0.2 0.3 0.1 0.1;

0.1 0.1 0.2 0.1 0;

0.1 0.1 0.1 0.1 0];

for i=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.7800 0.9200 0.9000 0.8600 0.8400 oushi = 0.5081 0.9106 0.8658 0.6870 0.6422

ge = 0.4000 0.3000 0.2000 0.2000 0.1000

可见样本A与各等级的格贴近度分别为0.4, 0.3, 0.2, 0.2, 0.1, 故可认为该产品属于B1等级。若按令两种贴近度判断,该产品属于B2等级。

(三)基于模糊等价关系的模糊聚类

一、算法步骤

1. 样本数据归一化

设X={x 1, x 2, …, x n }为要分类的n 个样本,每个样本有m 个指标,即

x i ={ x i 1, x i 2, …, x im }, i =1,2,..,n

得到原始数据矩阵X=(x ij )n ×m .

由于不同指标的数据量纲不同,为了使数据能够比较,要先对X 做归一化处理。

2. 建立模糊相似矩阵R

先建立样本x i 与x j 相似程度r ij , 进而构造模糊相似矩阵R=(r ij )n ×n

建立r ij 常用的方法有:

(1) 相似系数法

①夹角余弦法:m

ik

jk

ij x

x r ?=

②相关系数法:||||

m

ik

i jk j ij x

x x x r -?-=

(2)距离法

一般取r ij =1-c (d (x i ,x j ))α, 其中c 和α为适当选取的参数,使得 0≤r ij ≤1. 常用的距离有:

①海明距离:1

(,)||m

i j ik jk k d x x x x ==-∑

②欧氏距离:(,)i j d x x =

③切比雪夫距离:1

(,)max ||i j ik jk k m

d x x x x ≤≤=- (3) 贴近度法

①最大最小法:11()()

m

ik

jk k ij m

ik

jk k x x r x

x ==∧=

∨∑∑

②算术平均最小法:11

()

1

()2m

ik

jk k ij m ik jk k x

x r x x ==∧=

+∑∑

③几何平均最小法:11

()

m

ik

jk k ij m

k x

x r ==∧=

3. 求出R 的传递闭包t(R)

即改造相似关系为等价关系:令2R R R = , 再令422R R R = , …, 直到满足2l l l R R R = 与R l 相等,即为t(R), 仍记为R.

4. 选取合适的λ, 利用λ-截矩阵R λ进行分类(参考例1)。

二、Matlab 实现

求模糊相似矩阵R 的函数:fuz_distance.m

function R=fuz_distance(x,type)

%x 为归一化的数据矩阵, type 选择计算相似程度的方法 %返回模糊相似矩阵R

[n,m]=size(x);

%距离法的选择参数c和a, 需要根据具体情况修改以保证R(i,j)属于[0,1]

c=0.1;

a=1;

for i=1:n

for j=1:n

switch type

case 1 %夹角余弦法

R(i,j)=(x(i,:)*x(j,:)')/(norm(x(i,:),2)*norm(x(j,:),2));

case 2 %相关系数法

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));

case 3 %海明距离法

d=sum(abs(x(i,:)-x(j,:)));

R(i,j)=1-c*d^a;

case 4 %欧氏距离法

d=norm(x(i,:)-x(j,:),2);

R(i,j)=1-c*d^a;

case 5 %切比雪夫距离法

d=max(abs(x(i,:)-x(j,:)));

R(i,j)=1-c*d^a;

case 6 最大最小(贴近度)法

R(i,j)=sum(min([x(i,:);x(j,:)]))/sum(max([x(i,:);x(j,:)]));

case 7 算术平均最小(贴近度)法

R(i,j)=2*sum(min([x(i,:);x(j,:)]))/sum(x(i,:)+x(j,:));

case 8 %几何平均最小(贴近度)法

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;

while flag==0

B=fco(R,R); %做模糊合成运算

k=2*k;

if B==R

flag=1;

else

R=B; %循环计算R传递闭包

end

end

上面的函数tran_R.m调用函数矩阵模糊合成算子函数:fco.m function B=fco(Q,R)

%实现模糊合成算子的计算, 要求Q的列数等于R的行数

[n,m]=size(Q);

[m,l]=size(R);

B=zeros(n,l);

for i=1:n

for k=1:l

B(i,k)=max(min([Q(i,:);R(:,k)'])); end

end

求t(R)的λ-截矩阵的函数:fuz_lamda.m

function y=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类。

代码:

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达到最小(最优模糊聚类)放到下一篇。

matlab、lingo程序代码14-模糊聚类(聚类分析)

模糊聚类 function c=fuz_hc(a,b) %模糊矩阵的合成运算程序 %输入模糊矩阵a,b,输出合成运算结果c m=size(a,1);n=size(b,2);p=size(a,2); %错误排除 if size(a,2)~=size(b,1) disp('输入数据错误!');return; end %合成运算 for i=1:m for j=1:n for k=1:p temp(k)=min(a(i,k),b(k,j)); end c(i,j)=max(temp); end end disp('模糊矩阵a与b作合成运算后结果矩阵c为:'); c % 求模糊等价矩阵 function r_d=mhdj(r) [m,n]=size(r); for i=1:n for j=1:n for k=1:n r1(i,j,k)=min(r(i,k),r(k,j)); end r1max(i,j)=r1(i,j,1); end end for i=1:n for j=1:n for k=1:n

if r1(i,j,k)>r1max(i,j) r1max(i,j)=r1(i,j,k); end end r_d(i,j)=r1max(i,j); end end %模糊聚类程序 function f=mujl(x,lamda) %输入原始数据以及lamda的值 if lamda>1 disp('error!') %错误处理 end [n,m]=size(x); y=pdist(x); disp('欧式距离矩阵:'); dist=squareform(y) %欧氏距离矩阵 dmax=dist(1,1); for i=1:n for j=1:n if dist(i,j)>dmax dmax=dist(i,j); end end end disp('处理后的欧氏距离矩阵,其特点为每项元素均不超过1:'); sdist=dist/dmax %使距离值不超过1 disp('模糊关系矩阵:'); r=ones(n,n)-sdist %计算对应的模糊关系矩阵 t=mhdj(r); le=t-r; while all(all(le==0)==0)==1 %如果t与r相等,则继续求r乘以r r=t; t=mhdj(r); le=t-r;

聚类分析Matlab程序实现

2. Matlab程序 2.1 一次聚类法 X=[11978 12.5 93.5 31908;…;57500 67.6 238.0 15900]; T=clusterdata(X,0.9) 2.2 分步聚类 Step1 寻找变量之间的相似性 用pdist函数计算相似矩阵,有多种方法可以计算距离,进行计算之前最好先将数据用zscore 函数进行标准化。 X2=zscore(X); %标准化数据 Y2=pdist(X2); %计算距离 Step2 定义变量之间的连接 Z2=linkage(Y2); Step3 评价聚类信息 C2=cophenet(Z2,Y2); //0.94698 Step4 创建聚类,并作出谱系图 T=cluster(Z2,6); H=dendrogram(Z2); Matlab提供了两种方法进行聚类分析。 一种是利用 clusterdata函数对样本数据进行一次聚类,其缺点为可供用户选择的面较窄,不能更改距离的计算方法; 另一种是分步聚类:(1)找到数据集合中变量两两之间的相似性和非相似性,用pdist函数计算变量之间的距离;(2)用 linkage函数定义变量之间的连接;(3)用 cophenetic函数评价聚类信息;(4)用cluster函数创建聚类。 1.Matlab中相关函数介绍 1.1 pdist函数 调用格式:Y=pdist(X,’metric’) 说明:用‘metric’指定的方法计算 X 数据矩阵中对象之间的距离。’ X:一个m×n的矩阵,它是由m个对象组成的数据集,每个对象的大小为n。 metric’取值如下: ‘euclidean’:欧氏距离(默认);‘seuclidean’:标准化欧氏距离; ‘mahalanobis’:马氏距离;‘cityblock’:布洛克距离; ‘minkowski’:明可夫斯基距离;‘cosine’: ‘correlation’:‘hamming’: ‘jaccard’:‘chebychev’:Chebychev距离。 1.2 squareform函数 调用格式:Z=squareform(Y,..) 说明:强制将距离矩阵从上三角形式转化为方阵形式,或从方阵形式转化为上三角形式。 1.3 linkage函数 调用格式:Z=linkage(Y,’method’) 说明:用‘method’参数指定的算法计算系统聚类树。 Y:pdist函数返回的距离向量;

MATLAB实现FCM 聚类算法

本文在阐述聚类分析方法的基础上重点研究FCM 聚类算法。FCM 算法是一种基于划分的聚类算法,它的思想是使得被划分到同一簇的对象之间相似度最大,而不同簇之间的相似度最小。最后基于MATLAB实现了对图像信息的聚类。 第 1 章概述 聚类分析是数据挖掘的一项重要功能,而聚类算法是目前研究的核心,聚类分析就是使用聚类算法来发现有意义的聚类,即“物以类聚” 。虽然聚类也可起到分类的作用,但和大多数分类或预测不同。大多数分类方法都是演绎的,即人们事先确定某种事物分类的准则或各类别的标准,分类的过程就是比较分类的要素与各类别标准,然后将各要素划归于各类别中。确定事物的分类准则或各类别的标准或多或少带有主观色彩。 为获得基于划分聚类分析的全局最优结果,则需要穷举所有可能的对象划分,为此大多数应用采用的常用启发方法包括:k-均值算法,算法中的每一个聚类均用相应聚类中对象的均值来表示;k-medoid 算法,算法中的每一个聚类均用相应聚类中离聚类中心最近的对象来表示。这些启发聚类方法在分析中小规模数据集以发现圆形或球状聚类时工作得很好,但当分析处理大规模数据集或复杂数据类型时效果较差,需要对其进行扩展。 而模糊C均值(Fuzzy C-means, FCM)聚类方法,属于基于目标函数的模糊聚类算法的范畴。模糊C均值聚类方法是基于目标函数的模糊聚类算法理论中最为完善、应用最为广泛的一种算法。模糊c均值算法最早从硬聚类目标函数的优化中导出的。为了借助目标函数法求解聚类问题,人们利用均方逼近理论构造了带约束的非线性规划函数,以此来求解聚类问题,从此类内平方误差和WGSS(Within-Groups Sum of Squared Error)成为聚类目标函数的普遍形式。随着模糊划分概念的提出,Dunn [10] 首先将其推广到加权WGSS 函数,后来由Bezdek 扩展到加权WGSS 的无限族,形成了FCM 聚类算法的通用聚类准则。从此这类模糊聚类蓬勃发展起来,目前已经形成庞大的体系。 第 2 章聚类分析方法 2-1 聚类分析 聚类分析就是根据对象的相似性将其分群,聚类是一种无监督学习方法,它不需要先验的分类知识就能发现数据下的隐藏结构。它的目标是要对一个给定的数据集进行划分,这种划分应满足以下两个特性:①类内相似性:属于同一类的数据应尽可能相似。②类间相异性:属于不同类的数据应尽可能相异。图2.1是一个简单聚类分析的例子。

模糊聚类matlab程序

function julei(data) %%%%%%%%%%%%%%%模糊聚类%%%%%%%%%%%%%%%%%%%%%%% DATAFORCLUS=data; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%基于模糊等价关系的模糊 聚类%%%%%%%%%%%%%%%%%%%%%% %----------构造相似关系-----------% numrows=size(DATAFORCLUS,1); numcols=size(DATAFORCLUS,2); disp('请选择对象之间相似性统计量的方式: '); disp('<1-相关系数法|2-夹角余弦法>'); wayforr_ij=input('请输入: '); switch wayforr_ij case 1, %-----------------------------------相关系数法 for i=1:numrows, for j=1:numrows, meani=mean(DATAFORCLUS(i,:));meanj=mean(DATAFORCLUS(j,:)); simiR(i,j)=sum((DATAFORCLUS(i,:)-meani).*(DATAFORCLUS(j,:)-meanj))/... (sqrt(sum((DATAFORCLUS(i,:)-meani).^2))*sqrt(sum((DATAFORCLUS(j,:)-meanj).^2))); end end case 2, %-----------------------------------夹角余弦法 for i=1:numrows, for j=1:numrows, simiR(i,j)=sum(DATAFORCLUS(i,:).*DATAFORCLUS(j,:))/... (sqrt(sum(DATAFORCLUS(i,:).*DATAFORCLUS(i,:)))*sqrt(sum(DATAFORCLUS(j,: ).*DATAFORCLUS(j,:)))); end end end %-------改造成等价关系----------% sign=0; numselfmul=1; simiRk=eye(numrows); equi_tem=simiR; while sign==0, for i=1:numrows, for j=1:numrows, for c=1:numrows, rij_temp(c)=min([equi_tem(i,c) equi_tem(c,j)]); end

模糊聚类分析

目录 1引言: (3) 2 理论准备: (3) 2.1 模糊集合理论 (3) 2.2模糊C均值聚类(FCM) (4) 2.3 加权模糊C均值聚类(WFCM) (4) 3 聚类分析实例 (5) 3.1数据准备 (5) 3.1.1数据表示 (5) 3.1.2数据预处理 (5) 3.1.3 确定聚类个数 (6) 3.2 借助clementine软件进行K-means聚类 (7) 3.2.1 样本在各类中集中程度 (8) 3.2.2 原始数据的分类结果 (8) 3.2.3结果分析 (9) 3.3模糊C均值聚类 (10) 3.3.1 数据集的模糊C划分 (10) 3.3.2 模糊C均值聚类的目标函数求解方法 (10) 3.3.3 MATLAB软件辅助求解参数设置 (11) 3.3.4符号表示 (11)

3.3.5代码实现过程 (11) 3.3.6 FCM聚类分析 (11) 3.4 WFCM算法 (14) 3.4.1 WFCM聚类结果展示 (14) 3.4.2样本归类 (16) 3.4.3归类代码实现 (16) 4.结论 (17) 5 参考文献 (18) 6 附录 (18)

模糊聚类与非模糊聚类比较分析 摘要: 聚类分析是根据样本间的相似度实现对样本的划分,属于无监督分类。传统的聚类分析是研究“非此即彼”的分类问题,分类结果样本属于哪一类很明确,而很多实际的分类问题常伴有模糊性,即它不仅仅是属于一个特定的类,而是“既此又彼”。因此为了探究模糊聚类与非模糊聚类之间聚类结果的差别,本文首先采用系统聚类方法对上市公司132支股票数据进行聚类,确定比较合理的聚类数目为11类,然后分别采用K-means聚类与模糊聚类方法对股票数据进行聚类分析,最终得出模糊聚类在本案例中比K-means聚类更符合实际。 关键字:模糊集合,K-means聚类,FCM聚类,WFCM聚类 1引言: 聚类分析是多元统计分析的方法之一,属于无监督分类,是根据样本集的内在结构,按照样本之间相似度进行划分,使得同类样本之间相似性尽可能大,不同类样本之间差异性尽可能大。传统的聚类分析属于硬化分,研究对象的性质是非此即彼的,然而,现实生活中大多数事物具有亦此亦彼的性质。因此传统的聚类分析方法往往不能很好的解决具有模糊性的聚类问题。为此,模糊集合理论开始被应用到分类领域,并取得不错成果。 本文的研究目的是通过对比传统聚类和模糊聚类的聚类结果,找出二者之间的不同之处,并说明两种聚类分析方法在实例中应用的优缺点。 2理论准备: 2.1 模糊集合理论 模糊集合定义:设U为论域,则称由如下实值函数μA:U→ [ 0,1 ],u →μ ( u )所确定的集合A 为U上的模糊集合,而称μA为模糊集合A 的隶A 属函数,μ A ( u)称为元素u 对于A 的隶属度。若μA(u) =1,则认为u完全属于A;若μA(u) =0,则认为u完全不属于A,模糊集合是经典集合的推广。

matlab模糊聚类程序

3.数据标准化 (1) 数据矩阵 设论域12345678910,1112U={,,,,,,,,,,}x x x x x x x x x x x x 为被分类的对象,每个 对象又由指标123456789Y={,,,,,,,,}y y y y y y y y y 表示其性状即12345678910,1112x ={,,,,,,,,,,}i i i i i i i i i i i i i x x x x x x x x x x x x (i=1,2,…,12)于是得到原是数据矩阵 7 5 2 5 0 1 3 4 2 12 17 8 21 9 2 38 4 37 83 29 59 65 37 20 54 13 26 53 13 31 36 21 A= 23 12 18 14 178 69 112 78 104 36 94 31 47 23 25 36 11 12 11 24 6 16 101 32 53 52 86 52 41 38 94 28 6 7 8 8 2 0 3 29 169 51 58 72 49 30 48 37 146 327 91 126 92 89 69 79 29 49 93 27 54 64 24 17 23 11 49 18 7 9 5 1 2 18 3 8 ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? (2) 数据标准化 将模糊矩阵的每一个数据压缩到[0,1]上,采用平移.极差变换进行数据标准化 1i n 1i n 1i n A(i,k)-{A(i,k)}B(i,k)={A(i,k)}-{A(i,k)} min max min ≤≤≤≤≤≤ (k=1,2,…,m) 运用matlab 编程由函数F_jisjbzh.m 【见附录3.4】的标准化矩阵是 附录3.4 function [X]=F_JISjBzh(cs,X) %模糊聚类分析数据标准化变换 %X 原始数据矩阵;cs=0,不变换;cs=1,标准差变换 %cs=2,极差变换 if(cs==0) return ;end [n,m]=size(X);% 获得矩阵的行列数 if(cs==1) % 平移极差变换 for(k=1:m) xk=0; for(i=1:n) xk=xk+X(i,k);end xk=xk/n;sk=0; for(i=1:n) sk=sk+(X(i,k)-xk)^2;end sk=sqrt(sk/n);

模糊聚类分析报告例子

1. 模糊聚类分析模型 环境区域的污染情况由污染物在4个要素中的含量超标程度来衡量。设这5个环境区域的污染数据为1x =(80, 10, 6, 2), 2x =(50, 1, 6, 4), 3x =(90, 6, 4, 6), 4x =(40, 5, 7, 3), 5x =(10, 1, 2, 4). 试用模糊传递闭包法对X 进行分类。 解 : 由题设知特性指标矩阵为: * 80106250164906464057310124X ????????=???????? 数据规格化:最大规格化' ij ij j x x M = 其中: 12max(,,...,)j j j nj M x x x = 00.8910.860.330.560.1 0.860.671 0.60.5710.440.510.50.11 0.1 0.290.67X ????????=?? ?????? 构造模糊相似矩阵: 采用最大最小法来构造模糊相似矩阵55()ij R r ?=, 1 0.540.620.630.240.5410.550.700.530.62 0.5510.560.370.630.700.5610.380.240.530.370.381R ?? ??? ???=?? ?????? 利用平方自合成方法求传递闭包t (R ) 依次计算248,,R R R , 由于84R R =,所以4()t R R =

2 10.630.620.630.530.6310.560.700.530.62 0.5610.620.530.630.700.6210.530.530.530.530.531R ?? ??????=?? ??????, 4 10.630.620.630.530.6310.620.700.530.62 0.6210.620.530.630.700.6210.530.53 0.530.530.531R ????????=?? ?????? =8R 选取适当的置信水平值[0,1]λ∈, 按λ截矩阵进行动态聚类。把()t R 中的元素从大到小的顺序编排如下: 1>0.70>0.63>062>053. 依次取λ=1, 0.70, 0.63, 062, 053,得 11 000001000()0 010******* 0001t R ????? ? ??=?? ??????,此时X 被分为5类:{1x },{2x },{3x },{4x },{5x } 0.7 1000001010()001000101000001t R ?????? ??=?? ??????,此时X 被分为4类:{1x },{2x ,4x },{3x },{5x } 0.63 1101011010()001001101000001t R ?????? ??=?? ??????,此时X 被分为3类:{1x ,2x ,4x },{3x },{5x } 0.62 1111011110()11110111100 0001t R ?????? ??=?? ?????? ,此时X 被分为2类:{1x ,2x ,4x ,3x },{5x }

数学实验05聚类分析---用matlab做聚类分析

用matlab做聚类分析 Matlab提供了两种方法进行聚类分析。 一种是利用clusterdata函数对样本数据进行一次聚类,其缺点为可供用户选择的面较窄,不能更改距离的计算方法; 另一种是分步聚类:(1)找到数据集合中变量两两之间的相似性和非相似性,用pdist函数计算变量之间的距离;(2)用linkage函数定义变量之间的连接;(3)用cophenetic函数评价聚类信息;(4)用cluster函数创建聚类。1.Matlab中相关函数介绍 1.1pdist函数 调用格式:Y=pdist(X,’metric’) 说明:用‘metric’指定的方法计算X数据矩阵中对象之间的距离。’X:一个m×n的矩阵,它是由m个对象组成的数据集,每个对象的大小为n。 metric’取值如下: ‘euclidean’:欧氏距离(默认);‘seuclidean’:标准化欧氏距离; ‘mahalanobis’:马氏距离;‘cityblock’:布洛克距离; ‘minkowski’:明可夫斯基距离;‘cosine’: ‘correlation’:‘hamming’: ‘jaccard’:‘chebychev’:Chebychev距离。 1.2squareform函数 调用格式:Z=squareform(Y,..)

说明:强制将距离矩阵从上三角形式转化为方阵形式,或从方阵形式转化为上三角形式。 1.3linkage函数 调用格式:Z=linkage(Y,’method’) 说明:用‘method’参数指定的算法计算系统聚类树。 Y:pdist函数返回的距离向量; method:可取值如下: ‘single’:最短距离法(默认);‘complete’:最长距离法; ‘average’:未加权平均距离法;‘weighted’:加权平均法; ‘centroid’:质心距离法;‘median’:加权质心距离法; ‘ward’:内平方距离法(最小方差算法) 返回:Z为一个包含聚类树信息的(m-1)×3的矩阵。 1.4dendrogram函数 调用格式:[H,T,…]=dendrogram(Z,p,…) 说明:生成只有顶部p个节点的冰柱图(谱系图)。 1.5cophenet函数 调用格式:c=cophenetic(Z,Y) 说明:利用pdist函数生成的Y和linkage函数生成的Z计算cophenet相关系数。 1.6cluster函数 调用格式:T=cluster(Z,…) 说明:根据linkage函数的输出Z创建分类。

模糊数学在聚类分析中的作用(matlab代码)

function [M,N] = Example8_11 X=[1.8 2.1 3.2 2.2 2.5 2.8 1.9 2.0; 95 99 101 103 98 102 120 130; 0.15 0.21 0.18 0.17 0.16 0.20 0.09 0.11]; X=X' %X=[80 10 6 2;50 1 6 4;90 6 4 6;40 5 7 3;10 1 2 4] [M,N]=fuzzy_jlfx(4,5,X); end %% function [M,N]=fuzzy_jlfx(bzh,fa,X)%得到聚类结果 [X]=F_JlSjBzh(bzh,X);%数据标准化 [R]=F_JlR(fa,X);%建立相似矩阵 [A]=fuzzy_cdbb(R);%得到传递闭包矩阵 [Alamd]=fuzzy_lamdjjz(A);%得到lamdf截矩阵从而得到聚类结果[M,N]=F_JlDtjl(R);%动态聚类并画出聚类图 %% function [M,N]=F_JlDtjl(R) %clc; [A]=fuzzy_cdbb(R); U=unique(A); L=length(U); M=1:L; for i=L-1:-1:1 [m,n]=find(A==U(i)); N{i,1}=n; N{i,2}=m; A(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)]; end M=[1:L;M;ones(1,L)]; h=(max(U)-min(U))/L; figure text(L,1,sprintf('%d',M(2,L))); text(L+1,1-h,sprintf('%d',L)); text(0,1,sprintf('%3.2f',1)); text(0,(1+min(U))/2,sprintf('%3.2f',(1+min(U))/2)); text(0,min(U),sprintf('%3.2f',min(U))); hold on for i=L-1:-1:1 m=N{i,2};

聚类分析matlab程序设计代码

function varargout = lljuleifenxi(varargin) % LLJULEIFENXI MATLAB code for lljuleifenxi.fig % LLJULEIFENXI, by itself, creates a new LLJULEIFENXI or raises the existing % singleton*. % % H = LLJULEIFENXI returns the handle to a new LLJULEIFENXI or the handle to % the existing singleton*. % % LLJULEIFENXI('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in LLJULEIFENXI.M with the given input arguments. % % LLJULEIFENXI('Property','Value',...) creates a new LLJULEIFENXI or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before lljuleifenxi_OpeningFcn gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to lljuleifenxi_OpeningFcn via varargin. % % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one % instance to run (singleton)". % % See also: GUIDE, GUIDATA, GUIHANDLES % Edit the above text to modify the response to help lljuleifenxi % Last Modified by GUIDE v2.5 07-Jan-2015 18:18:25 % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @lljuleifenxi_OpeningFcn, ... 'gui_OutputFcn', @lljuleifenxi_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT % --- Executes just before lljuleifenxi is made visible. function lljuleifenxi_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB

Matlab笔记-模糊聚类分析原理及实现

23. 模糊聚类分析原理及实现 聚类分析,就是用数学方法研究和处理所给定对象,按照事物间的相似性进行区分和分类的过程。 传统的聚类分析是一种硬划分,它把每个待识别的对象严格地划分到某个类中,具有非此即彼的性质,这种分类的类别界限是分明的。 随着模糊理论的建立,人们开始用模糊的方法来处理聚类问题,称为模糊聚类分析。由于模糊聚类得到了样本数与各个类别的不确定性程度,表达了样本类属的中介性,即建立起了样本对于类别的不确定性的描述,能更客观地反映现实世界。 本篇先介绍传统的两种(适合数据量较小情形,及理解模糊聚类原理):基于择近原则、模糊等价关系的模糊聚类方法。 (一)预备知识 一、模糊等价矩阵 定义1设R=(r ij )n ×n 为模糊矩阵,I 为n 阶单位矩阵,若R 满足 i) 自反性:I ≤R (等价于r ii =1); ii) 对称性:R T =R; 则称R 为模糊相似矩阵,若再满足 iii) 传递性:R 2 ≤R (等价于1 ()n ik kj ij k r r r =∨∧≤) 则称R 为模糊等价矩阵。

定理1设R 为n 阶模糊相似矩阵,则存在一个最小的自然数k (k

matlab实现Kmeans聚类算法

matlab实现Kmeans聚类算法 1.简介: Kmeans和应用于混合高斯模型的受限EM算法是一致的。高斯混合模型广泛用于数据挖掘、模式识别、机器学习、统计分析。Kmeans 的迭代步骤可以看成E步和M步,E:固定参数类别中心向量重新标记样本,M:固定均值只考虑(估计)了均值,而没有估计类别的方差,所以聚类的结构比较适合于特征协方差相等的类别。 Kmeans在某种程度也可以看成Meanshitf的特殊版本,Meanshift 是所以Meanshift可以用于寻找数据的多个模态(类别),利用的是梯度上升法。在06年的一篇CVPR文章上,证明了Meanshift方法是牛顿拉夫逊算法的变种。Kmeans和EM算法相似是指混合密度的形式已知(参数形式已知)情况下,利用迭代方法,在参数空间中搜索解。而Kmeans和Meanshift相似是指都是一种概率密度梯度估计的方法,不过是Kmean选用的是特殊的核函数(uniform kernel),而与混合概率密度形式是否已知无关,是一种梯度求解方式。 k-means是一种聚类算法,这种算法是依赖于点的邻域来决定哪些点应该分在点,也可以对高维的空间(3维,4维,等等)的点进行聚类,任意高维的空间都可以。 上图中的彩色部分是一些二维空间点。上图中已经把这些点分组了,并使用了不同的颜色对各组进行了标记。这就是聚类算法要做的事情。 这个算法的输入是: 1:点的数据(这里并不一定指的是坐标,其实可以说是向量)

2:K,聚类中心的个数(即要把这一堆数据分成几组) 所以,在处理之前,你先要决定将要把这一堆数据分成几组,即聚成几类。但并不是在所有情况下,你都事先就能知道需要把数据聚成几类的。意味着使用k-means就不能处理这种情况,下文中会有讲解。 把相应的输入数据,传入k-means算法后,当k-means算法运行完后,该算法的输出是: 1:标签(每一个点都有一个标签,因为最终任何一个点,总会被分到某个类,类的id号就是标签) 2:每个类的中心点。 标签,是表示某个点是被分到哪个类了。例如,在上图中,实际上有4中“标签”,每个“标签”使用不同的颜色来表示。所有黄色点我们可以用标签以看出,有3个类离的比较远,有两个类离得比较近,几乎要混合在一起了。 当然,数据集不一定是坐标,假如你要对彩色图像进行聚类,那么你的向量就可以是(b,g,r),如果使用的是hsv颜色空间,那还可以使用(h,s,v),当然肯定可以有不同的组合例如(b*b,g*r,r*b) ,(h*b,s*g,v*v)等等。 在本文中,初始的类的中心点是随机产生的。如上图的红色点所示,是本文随机产生的初始点。注意观察那两个离得比较近的类,它们几乎要混合在一起,看看算法是如何将它们分开的。 类的初始中心点是随机产生的。算法会不断迭代来矫正这些中心点,并最终得到比较靠5个中心点的距离,选出一个距离最小的(例如该点与第2个中心点的距离是5个距离中最小的),那么该点就归属于该类.上图是点的归类结果示意图. 经过步骤3后,每一个中心center(i)点都有它的”管辖范围”,由于这个中心点不一定是这个管辖范围的真正中心点,所以要重新计算中心点,计算的方法有很多种,最简单的一种是,直接计算该管辖范围内所有点的均值,做为心的中心点new_center(i). 如果重新计算的中心点new_center(i)与原来的中心点center(i)的距离大于一定的阈值(该阈值可以设定),那么认为算法尚未收敛,使用new_center(i)代替center(i)(如图,中心点从红色点

MATLAB 层次聚类

MATLAB 层次聚类应用简述 MATLAB的统计工具箱中的多元统计分析中提供了聚类分析的两种方法: 1.层次聚类hierarchical clustering 2.k-means聚类 这里用最简单的实例说明以下层次聚类原理和应用发法。 层次聚类是基于距离的聚类方法,MATLAB中通过pdist、linkage、dendrogram、cluster等函数来完成。 层次聚类的过程可以分这么几步: (1) 确定对象(实际上就是数据集中的每个数据点)之间的相似性,实际上就是定义一个表征对象之间差异的距离,例如最简单的平面上点的聚类中,最经常使用的就是欧几里得距离。 这在MATLAB中可以通过Y=pdist(X)实现,例如 >> X=randn(6,2) X = -0.4326 1.1892 -1.6656 -0.0376 0.1253 0.3273 0.2877 0.1746 -1.1465 -0.1867 1.1909 0.7258 >> plot(X(:,1),X(:,2),'bo') %给个图,将来对照聚类结果把 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~图1~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> Y=pdist(X) Y =

Columns 1 through 14 1.7394 1.0267 1.2442 1.5501 1.6883 1.8277 1.9648 0.5401 2.9568 0.2228 1.3717 1.1377 1.4790 1.0581 Column 15 2.5092 例子中X数据集可以看作包含6个平面数据点,pdist之后的Y是一个行向量,15个元素分别代表X 的第1点与2-6点、第2点与3-6点,......这样的距离。那么对于M个点的数据集X,pdist之后的Y 将是具有M*(M-1)/2个元素的行向量。Y这样的显示虽然节省了内存空间,但对用户来说不是很易 懂,如果需要对这些距离进行特定操作的话,也不太好索引。MATLAB中可以用squareform把Y转 换成方阵形式,方阵中位置的数值就是X中第i和第j点之间的距离,显然这个方阵应该是 个对角元素为0的对称阵。 >> squareform(Y) ans = 0 1.7394 1.0267 1.2442 1.5501 1.6883 1.7394 0 1.8277 1.9648 0.5401 2.9568 1.0267 1.8277 0 0.2228 1.3717 1.1377 1.2442 1.9648 0.2228 0 1.4790 1.0581 1.5501 0.5401 1.3717 1.4790 0 2.5092 1.6883 2.9568 1.1377 1.0581 2.5092 0 这里需要注意的是,pdist可以使用多种参数,指定不同的距离算法。help pdist把。 另外,当数据规模很大时,可以想象pdist产生的Y占用内存将是很吓人的,比如X有10k个数据点 ,那么X占10k*8*2Bytes=160K,这看起来不算啥,但是pdist后的Y会有10k*10k/2*8Bytes=400M 。怕了把,所以,废话说在前面,用MATLAB的层次聚类来处理大规模数据,大概是很不合适的。 (2) 确定好了对象间的差异度(距离)后,就可以用Z=linkage(Y)来产生层次聚类树了。 >> Z=linkage(Y) %Z=linkage(Y,’method’)说明:用‘method’参数指定的算法计算系统聚类树。 Z = 3.0000 4.0000 0.2228 2.0000 5.0000 0.5401 1.0000 7.0000 1.0267 6.0000 9.0000 1.0581 8.0000 10.0000 1.3717 对于M个元素的X,前面说了Y是1行M*(M-1)/2的行向量,Z则是(M-1)*3的矩阵。 Z数组的前两列是索引下标列,最后一列是距离列。例如上例中表示在产生聚类树的计算过程中

FCMClust(模糊c均值聚类算法MATLAB实现)

function [center, U, obj_fcn] = FCMClust(data, cluster_n, options) % FCMClust.m 采用模糊C均值对数据集data聚为cluster_n类 % 用法: % 1. [center,U,obj_fcn] = FCMClust(Data,N_cluster,options); % 2. [center,U,obj_fcn] = FCMClust(Data,N_cluster); % 输入: % data ---- nxm矩阵,表示n个样本,每个样本具有m的维特征值 % N_cluster ---- 标量,表示聚合中心数目,即类别数 % options ---- 4x1矩阵,其中 % options(1): 隶属度矩阵U的指数,>1 (缺省值: 2.0) % options(2): 最大迭代次数(缺省值: 100) % options(3): 隶属度最小变化量,迭代终止条件(缺省值: 1e-5) % options(4): 每次迭代是否输出信息标志(缺省值: 1) % 输出: % center ---- 聚类中心 % U ---- 隶属度矩阵 % obj_fcn ---- 目标函数值 % Example: % data = rand(100,2); % [center,U,obj_fcn] = FCMClust(data,2); % plot(data(:,1), data(:,2),'o'); % hold on; % maxU = max(U); % index1 = find(U(1,:) == maxU); % index2 = find(U(2,:) == maxU); % line(data(index1,1),data(index1,2),'marker','*','color','g'); % line(data(index2,1),data(index2,2),'marker','*','color','r'); % plot([center([1 2],1)],[center([1 2],2)],'*','color','k') % hold off; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%% if nargin ~= 2 & nargin ~= 3, %判断输入参数个数只能是2个或3个 error('Too many or too few input arguments!'); end data_n = size(data, 1); % 求出data的第一维(rows)数,即样本个数 in_n = size(data, 2); % 求出data的第二维(columns)数,即特征值长度 % 默认操作参数 default_options = [2; % 隶属度矩阵U的指数 100; % 最大迭代次数 1e-5; % 隶属度最小变化量,迭代终止条件

基本FIS编辑器(MATLAB模糊逻辑工具箱函数)

基本FIS编辑器 函数fuzzy 格式 fuzzy %弹出未定义的基本FIS编辑器 fuzzy(fismat) %使用fuzzy('tipper'),弹出下图FIS编辑器。 编辑器是任意模糊推理系统的高层显示,它允许你调用各种其它的编辑器来对其操作。此界面允许你方便地访问所有其它的编辑器,并以最灵活的方式与模糊系统进行交互。 方框图:窗口上方的方框图显示了输入、输出和它们中间的模糊规则处理器。单击任意一个变量框,使选中的方框成为当前变量,此时它变成红色高亮方框。双击任意一个变量,弹出隶属度函数编辑器,双击模糊规则编辑器,弹出规则编辑器。 图6-19 菜单项:FIS编辑器的菜单棒允许你打开相应的工具,打开并保存系统。 ·File菜单包括: New mamdani FIS … 打开新mamdani型系统; New Sugeno FIS …打开新Sugeno型系统; Open from disk …从磁盘上打开指定的.fis文件系统; Save to disk 保存当前系统到磁盘上的一个.fis文件上; Save to disk as … 重命名方式保存当前系统到磁盘上; Open from workspace … 从工作空间中指定的FIS结构变量装入一个系统; Save to workspace …保存系统到工作空间中当前命名的FIS结构变量中; Save to workspace as …保存系统到工作空间中指定的FIS结构变量中; Close windows 关闭GUI; ·Edit菜单包括: Add input 增加另一个输入到当前系统中; Add output 增加另一个输出到当前系统中; Remove variable 删除一个所选的变量;

相关主题