傅里叶学徒
2021-09-17 14:22
采纳率: 100%
浏览 21

MATLAB进行单个属性的FCM聚类,用Xie-Beni进行选择最佳聚类数,运行后停不下来了。

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

  • 收藏

1条回答 默认 最新

  • 技术专家团-Joel 2021-09-17 14:32
    已采纳

    同学,你把聚类退出条件改宽松一点,不要弄那么小

    norm(U-U0,Inf)<1.0000e-6
    

    1.0000e-6弄大一点,比如1e-2试一试,不然很难满足这个条件,进入死循环

    已采纳该答案
    打赏 评论

相关推荐 更多相似问题