Code covered by the BSD License  

Highlights from
Fuzzy C-Means with Focal Point

image thumbnail

Fuzzy C-Means with Focal Point

by

 

We present a generalization of partitional clustering.

fcmfp(data, cluster_n, options)
function [center, U, obj_fcn] = fcmfp(data, cluster_n, options)
%FCMFP Data set clustering using fuzzy c-means clusteringwith focal point.
%
%   [CENTER, U, OBJ_FCN] = FCMFP(DATA, N_CLUSTER) finds N_CLUSTER number of
%   clusters in the data set DATA. DATA is size M-by-N, where M is the number of
%   data points and N is the number of coordinates for each data point. The
%   coordinates for each cluster center are returned in the rows of the matrix
%   CENTER. The membership function matrix U contains the grade of membership of
%   each DATA point in each cluster. The values 0 and 1 indicate no membership
%   and full membership respectively. Grades between 0 and 1 indicate that the
%   data point has partial membership in a cluster. At each iteration, an
%   objective function is minimized to find the best location for the clusters
%   and its values are returned in OBJ_FCN.
%
%   [CENTER, ...] = FCMFP(DATA,N_CLUSTER,OPTIONS) specifies a vector of options
%   for the clustering process:
%       OPTIONS(1): exponent for the matrix U             (default: 2.0)
%       OPTIONS(2): maximum number of iterations          (default: 100)
%       OPTIONS(3): minimum amount of improvement         (default: 1e-5)
%       OPTIONS(4): info display during iteration         (default: 1)
%       OPTIONS(5): zeta value (zeta>=0), if zeta is zero you don't use the
%       focal point and if zeta nonzero, zeta determines the relative
%       attractive power of the point P                   (defalt: 2.0) 
%       OPTIONS(6): Matrix with the U data
%       OPTIONS(7): Vector with the positions of P, this will be one more
%       dimension than the data (default: [mean(data) 2])
%       OPTIONS(8): Matrix with the centers (default: [mean(data) 2])
%
%   The clustering process stops when the maximum number of iterations
%   is reached, or when the objective function improvement between two
%   consecutive iterations is less than the minimum amount of improvement
%   specified. Use NaN to select the default value.
%
%   Example
%       data = rand(100,2);
%       [center,U,obj_fcn] = fcmfp(data,2);
%       plot(data(:,1), data(:,2),'o');
%       hold on;
%       maxU = max(U);
%       % Find the data points with highest grade of membership in cluster 1
%       index1 = find(U(1,:) == maxU);
%       % Find the data points with highest grade of membership in cluster 2
%       index2 = find(U(2,:) == maxU);
%       line(data(index1,1),data(index1,2),'marker','*','color','g');
%       line(data(index2,1),data(index2,2),'marker','*','color','r');
%       % Plot the cluster centers
%       plot([center([1 2],1)],[center([1 2],2)],'*','color','k')
%       hold off;
%
%   See also FCMFPDEMO, INITFCM, IRISFCM, DISTFCMFP, STEPFCMFP and ITERFCMFP.

%   Roger Jang, 12-13-94, N. Hickey 04-16-01
%   Copyright 1994-2002 The MathWorks, Inc. 
%   $Revision: 1.13 $  $Date: 2002/04/14 22:20:38 $
%
%   Silvio Filipe, 04-12-2011
%   $Revision: 2.00 $  $Date: 2011/04/12 10:35:00 $

if nargin ~= 2 & nargin ~= 3,
	error('Too many or too few input arguments!');
end

data_n = size(data, 1);
in_n = size(data, 2);

% Change the following to set default options
CENTER = zeros([cluster_n size(data, 2)]);
CENTER(1:cluster_n, 1:size(data, 2)-1) = rand(cluster_n, size(data, 2)-1);
default_options = {2;               % exponent for the partition matrix U
		100;                        % max. number of iteration
		1e-5;                       % min. amount of improvement
		1;                          % info display during iteration
        2.0;                        % zeta value
        initfcm(cluster_n, data_n); % Matrix U
        [mean(data) 1.0];           % P point
        CENTER};                    % CENTER

if nargin == 2,
	options = default_options;
else
	% If "options" is not fully specified, pad it with default values.
	if length(options) < 6,
		tmp = default_options;
		tmp(1:length(options)) = options;
		options = tmp;
	end
	% If some entries of "options" are nan's, replace them with defaults.
    for i = 1 : length(options)
        nan_index = find(isnan(options{i})==1);
        options{nan_index} = default_options{nan_index};
    end
    if options{1} <= 1,
        error('The exponent should be greater than 1!');
    end
    
end

expo = options{1};          % Exponent for U
max_iter = options{2};		% Max. iteration
min_impro = options{3};		% Min. improvement
display = options{4};		% Display info or not
zeta = options{5};          % zeta value
U = options{6};             % Matrix U
P = options{7};             % P point
center = options{8};        % Center

obj_fcn = zeros(max_iter, 1);	% Array for objective function

% Main loop
for i = 1:max_iter,
    
	[U, center, obj_fcn(i)] = stepfcmfp(data, U, cluster_n, expo, P, zeta, center);
	if display, 
		fprintf('Iteration count = %d, obj. fcn = %f\n', i, obj_fcn(i));
    end
	
    % check termination condition
	if i > 1,
		if abs(obj_fcn(i) - obj_fcn(i-1)) < min_impro, break; end,
    end
end

iter_n = i;	% Actual number of iterations 
obj_fcn(iter_n+1:max_iter) = [];

Contact us