%模糊聚类程序
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,:)
gru_val=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('第i类样本序号:'),i
gru_val=gru_val+1;
disp(group(i,:)) %仅输出不重复的分类
end
end
gru_val
- 1
- 2
前往页