clc;
clear all;
close all;
%导入数据
Input=load('C:\nasa93.txt');%一个93*18的数据集,前面17个是属性,我要对每个属性的93个数据进行FCM聚类并通过Xie-Beni指标选择最佳的聚类数
Data=Input(:,1);
%对特征mode进行聚类
C=3;
%定义距离、划分矩阵
[N,S]=size(Data);
Dist(C,N)=0; U(C,N)=0; P(C,S)=0;
% 初始化随机矩阵
m = C; % m行
n = N; % n列
U0 = rand(m, n);
% 矩阵处理
for irow = 1:m
U0(:, irow) = U0(:, irow)/sum(U0(:,irow));
end
disp(U0);
while true
%更新聚类中心
Um=U0.^2;
P=sum(UmData,2)./sum(Um,2);
%更新划分矩阵
for i=1:C
for j=1:N
Dist(i,j)=fuzzydist(Data(j,:),P(i,:));
end
end
U=1./(Dist.^2.(ones(C,1)*sum(Dist.^(-2))));
%目标函数:基于隶属度的聚类损失函数
Obj_Fcn=sum(sum(Um.*Dist.^2));
%Xie-Beni聚类有效指标
for s=1:C-1
for t=s+1:C
V_xb=(sum(sum(Um.*Dist.^2)))/(N*min((P(t,:)-P(s,:)).^2));
end
end
if norm(U-U0,Inf)<1.0000e-6
break
end
U0=U;
end