This is a collection of C++ programs that implement the
popular clustering algorithm known as ISODATA. (See
Algorithms for Clustering Data by A. K. Jain and R.
C. Dubes, Prentice Hall, 1988). Intuitively, the algorithm
tries to find the best set of cluster centers for a given
set of points in ddimensional space through an iterative
approach until some maximum number of iterations are
performed. It uses a number of different heuristics to
determine when to merge or split clusters.
At a high level, in each iteration of the algorithm the
following takes place: points are assigned to their closest
cluster centers, cluster centers are updated to be the
centroid of their associated points, clusters with very few
points are deleted, large clusters satisfying some
heuristics are split, and small clusters satisfying other
heuristics are merged. The algorithm continues until
maximum number of iterations are performed. Here we go over
the algorithm in more detail. See the related publications
below for further information.
The code is written in C++ and has been successfully
compiled and run on a SUN Blade 100 running Solaris 2.8,
using the g++ compiler (version 2.95.3). After downloading
and unzipping each version, type "make" to compile
the program into the executable called "IsoClus". To run
the code, type "IsoClus < filename" where
"filename" is the name of the input file containing running
time parameters. A sample input file listing all directives
is available
here.
Various implementations of the algorithm as mentioned in the
paper below are available below for download. These are
described below.
