gusucode.com > 模糊控制工具箱 fuzzy logic toolbox源码程序 > fuzzy/fuzdemos/irisfcm.m
function irisfcm % IRISFCM Fuzzy c-means clustering demo (4-D). % This is a script illustrating how to use fuzzy c-means routines for % IRIS data clustering, with on-line animation. % % See also DISTFCM, INITFCM, FCMDEMO, STEPFCM, FCM. % R. Jang, 12-12-94. % Copyright 1994-2002 The MathWorks, Inc. % $Revision: 1.7 $ $Date: 2002/04/14 22:16:05 $ load iris.dat % Load data class1 = iris(find(iris(:,5)==1), :); % data for class 1 class2 = iris(find(iris(:,5)==2), :); % data for class 2 class3 = iris(find(iris(:,5)==3), :); % data for class 3 data = iris; % whole data set to be clustered data_n = size(data, 1); % number of data expo = 2.0; % Exponent for U cluster_n = 3; % Number of clusters max_iter = 100; % Max. iteration min_impro = 1e-6; % Min. improvement obj_fcn = zeros(max_iter, 1); % Array for objective function digitH = zeros(cluster_n, 6); % Array for handles of cluster centers U = initfcm(cluster_n, data_n); % Initial fuzzy partition [U, center] = stepfcm(data, U, cluster_n, expo);% Initial cluster centers % Project data to 2-D and plot them mark = '.'; seq = [1 2; 1 3; 1 4; 2 3; 2 4; 3 4]; for j = 1:6, x = seq(j, 1); y = seq(j, 2); % inputs selected for plot subplot(2,3,j); h = plot([class1(:,x) class2(:,x) class3(:,x)], ... [class1(:,y) class2(:,y) class3(:,y)], mark); set(h, 'markersize', 8); xlabel(['x' int2str(x)]); ylabel(['x' int2str(y)]); % Initialize centers for k = 1:cluster_n, digitH(k,j) = text(center(k, seq(j,1)), ... center(k,seq(j,2)), int2str(k)); set(digitH(k,j), 'erase', 'xor', 'horizon', 'center'); end end % Main loop for i = 1:max_iter, [U, center, obj_fcn(i)] = stepfcm(data, U, cluster_n, expo); fprintf('Iteration count = %d, obj. fcn = %f\n', i, obj_fcn(i)); if i > 1, % check termination condition if abs(obj_fcn(i) - obj_fcn(i-1)) < min_impro, break; end, end % refresh centers for animation for j = 1:6, for k = 1:cluster_n, set(digitH(k,j), 'pos', center(k, seq(j,:))); end end drawnow; end % Plot of objection function iter_n = i; % Actual number of iterations figure; % New figure obj_fcn(iter_n+1:max_iter) = [];% Delete unused elements plot(obj_fcn); axis([1 i min(obj_fcn) max(obj_fcn)]); title('Objective Function for IRIS Data Clustering'); xlabel('Numbers of Iterations');