📄 steprfcm.m
字号:
function [U_new, center, obj_fcn] = steprfcm(data, U, cluster_n, expo)
%STEPFCM One step in fuzzy c-mean clustering.
% [U_NEW, CENTER, ERR] = STEPFCM(DATA, U, CLUSTER_N, EXPO)
% performs one iteration of fuzzy c-mean clustering, where
%
% DATA: matrix of data to be clustered. (Each row is a data point.)
% U: partition matrix. (U(i,j) is the MF value of data j in cluster j.)
% CLUSTER_N: number of clusters.
% EXPO: exponent (> 1) for the partition matrix.
% U_NEW: new partition matrix.
% CENTER: center of clusters. (Each row is a center.)
% ERR: objective function for partition U.
%
% Note that the situation of "singularity" (one of the data points is
% exactly the same as one of the cluster centers) is not checked.
% However, it hardly occurs in practice.
%
% See also DISTFCM, INITFCM, IRISFCM, FCMDEMO, FCM.
% Roger Jang, 11-22-94.
% Copyright 1994-2002 The MathWorks, Inc.
% $Revision: 1.13 $ $Date: 2002/04/02 21:25:28 $
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
mf = U.^expo; % MF matrix after exponential modification
center = mf*data./((ones(size(data, 2), 1)*sum(mf'))'); % new center
dist = distfcm(center, data); % fill the distance matrix
obj_fcn = sum(sum((dist.^2).*mf)); % objective function
tmp = dist.^(-2/(expo-1)); % calculate new U, suppose expo != 1
U_new0 = tmp./(ones(cluster_n, 1)*sum(tmp));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
dist_center=distfcm(center,center);
%dist(find(dist_center==0))=1000;
%min_dist_center=min(min(dist_center));%找到中心点距离最小的值
%Threshold=min_dist_center;%设定下近似的阈值
[m,n]=size(data);
U_new=[];
for i=1:m
D=distfcm(center,data(i,:));%求各点到中心点的距离%
[j,k]=sort(D);%对距离排序,找出最近的两个中心点
D1=D(k(2))-D(k(1));%求点到最近的两个中心点的距离差
if D1>=dist_center(k(1),k(2))*0.98;
U_new1=U_new0(:,i);
U_new1=zeros(size(U_new1));
U_new1(k(1))=1;
else
U_new1=U_new0(:,i);
end
U_new=[U_new,U_new1];
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -