📄 fcm.m
字号:
%BY YY 模糊聚类算法 2008.3.4
%采用数量积求相似矩阵
%输入样本矩阵
X=input('please input X:');
[N,M]=size(X);
%N是样本数 M是特征数
%N个样本M个指标的平均值矩阵和标准差矩阵
P=zeros(M,1);
for j=1:M
for i=1:N
P(j)=P(j)+X(i,j);
end
P(j)=P(j)/N;
end
P1=zeros(M,1);
for j=1:M
for i=1:N
P1(j)=P1(j)+(X(i,j)-P(j))*(X(i,j)-P(j));
end
P1(j)=P1(j)/N;
P1(j)=sqrt(P1(j));
end
%标准化将数据归一化
for i=1:N
for j=1:M
X1(i,j)=(X(i,j)-P(j))/P1(j);
end
end
for j=1:M
A(j)=min(X1(:,j));%最小
B(j)=max(X1(:,j));%最大
end
for i=1:N
for j=1:M
X2(i,j)=(X1(i,j)-A(j))/(B(j)-A(j));
end
end
X2
%以上都是数据标准化
%下面建立模糊相似矩阵
R1=zeros(N,N);
for i=1:N
for k=1:N
if i==k ;
else
for j=1:M
R1(i,k)= R1(i,k)+X2(i,j)*X2(k,j);
end
end
end
end
m=max(R1);
m=max(m);
R=zeros(N,N);
for i=1:N
for j=1:N
if i==j
R(i,j)=1;
else
R(i,j)=R1(i,j)/m;
end
end
end
R
%建立模糊等价关系矩阵
flag=0;
C=R;
T=zeros(N,N);
while flag==0
for i=1:N
for j=1:N
for k=1:N
T(i,j)=max(min(C(i,k),C(k,j)),T(i,j));%计算传递闭包 不能少T(i,j)这项 否则T(i,i)将不再为1 取大取小合运算
end
end
end
if T==C
flag=1;
else
C=T;
end
end
T %输出传递闭包
%取不同的置信水平q,q需要设定
q=0.25;
for i=1:N
for j=1:N
if T(i,j)>=q
T1(i,j)=1;
else
T1(i,j)=0;
end
end
end
T1 %T1为一个P截矩阵 如有对应的列向量相等,则是同一类
%输出结果
F=zeros(N,N);
k=1;
for i=1:N
e=1;
F(k,e)=i;
for j=1:N
if i==j;
else
if isequal(T1(i,:),T1(j,:))
e=e+1;
F(k,e)=j;
end
end
end
k=k+1;
end
F
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -