matlab、lingo程序代码14-模糊聚类(聚类分析)
- 格式:docx
- 大小:13.84 KB
- 文档页数:5
模糊聚类
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,:)