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

  • 格式:docx
  • 大小:13.84 KB
  • 文档页数:5

下载文档原格式

  / 12
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

模糊聚类

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;

end

disp('模糊等价矩阵为:')

t

for i=1:n

k=1;

for j=1:n

if t(i,j)>=lamda

group(i,k)=j;

k=k+1;

end

end

end

disp('聚类结果如下(数字0为自动填充数据,不是样本序号):') group(1,:)

for i=2:n

k=0;

for j=1:i-1

if all(group(i,:)==group(j,:))==1 %两行值完全相等,不输出k=1;break;

end

end

if k==0

disp(group(i,:)) %仅输出不重复的分类

end

end

%模糊聚类程序

function f=mujl(x,lamda)

%输入原始数据以及lamda的值

if lamda>1

disp('error!') %错误处理

end

[n,m]=size(x);

xmax=max(x);xmin=min(x);

x=(x-xmin(ones(n,1),:))./(xmax(ones(n,1),:)-xmin(ones(n,1),:))

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;

end

disp('模糊等价矩阵为:')

t

for i=1:n

k=1;

for j=1:n

if t(i,j)>=lamda

group(i,k)=j;

k=k+1;

end

end

end

disp('聚类结果如下(数字0为自动填充数据,不是样本序号):') group(1,:)