Example 1: ClusterHierarchical

This example illustrates a typical usage of ClusterHierarchical . The Fisher iris data is clustered. First the distance between irises is computed using the class Dissimilarities . The resulting distance matrix is then clustered using ClusterHierarchical , and cluster memberships for 5 clusters are computed.

import java.io.*;
import com.imsl.stat.*;

public class ClusterHierarchicalEx1 {
    public static void main(String argv[]) throws Exception {
        double[][] irisData = {
            {5.1, 3.5, 1.4, .2}, {4.9, 3.0, 1.4, .2},
            {4.7, 3.2, 1.3, .2}, {4.6, 3.1, 1.5, .2},
            {5.0, 3.6, 1.4, .2}, {5.4, 3.9, 1.7, .4},
            {4.6, 3.4, 1.4, .3}, {5.0, 3.4, 1.5, .2},
            {4.4, 2.9, 1.4, .2}, {4.9, 3.1, 1.5, .1},
            {5.4, 3.7, 1.5, .2}, {4.8, 3.4, 1.6, .2},
            {4.8, 3.0, 1.4, .1}, {4.3, 3.0, 1.1, .1},
            {5.8, 4.0, 1.2, .2}, {5.7, 4.4, 1.5, .4},
            {5.4, 3.9, 1.3, .4}, {5.1, 3.5, 1.4, .3},
            {5.7, 3.8, 1.7, .3}, {5.1, 3.8, 1.5, .3},
            {5.4, 3.4, 1.7, .2}, {5.1, 3.7, 1.5, .4},
            {4.6, 3.6, 1.0, .2}, {5.1, 3.3, 1.7, .5},
            {4.8, 3.4, 1.9, .2}, {5.0, 3.0, 1.6, .2},
            {5.0, 3.4, 1.6, .4}, {5.2, 3.5, 1.5, .2},
            {5.2, 3.4, 1.4, .2}, {4.7, 3.2, 1.6, .2},
            {4.8, 3.1, 1.6, .2}, {5.4, 3.4, 1.5, .4},
            {5.2, 4.1, 1.5, .1}, {5.5, 4.2, 1.4, .2},
            {4.9, 3.1, 1.5, .2}, {5.0, 3.2, 1.2, .2},
            {5.5, 3.5, 1.3, .2}, {4.9, 3.6, 1.4, .1},
            {4.4, 3.0, 1.3, .2}, {5.1, 3.4, 1.5, .2},
            {5.0, 3.5, 1.3, .3}, {4.5, 2.3, 1.3, .3},
            {4.4, 3.2, 1.3, .2}, {5.0, 3.5, 1.6, .6},
            {5.1, 3.8, 1.9, .4}, {4.8, 3.0, 1.4, .3},
            {5.1, 3.8, 1.6, .2}, {4.6, 3.2, 1.4, .2},
            {5.3, 3.7, 1.5, .2}, {5.0, 3.3, 1.4, .2},
            {7.0, 3.2, 4.7, 1.4}, {6.4, 3.2, 4.5, 1.5},
            {6.9, 3.1, 4.9, 1.5}, {5.5, 2.3, 4.0, 1.3},
            {6.5, 2.8, 4.6, 1.5}, {5.7, 2.8, 4.5, 1.3},
            {6.3, 3.3, 4.7, 1.6}, {4.9, 2.4, 3.3, 1.0},
            {6.6, 2.9, 4.6, 1.3}, {5.2, 2.7, 3.9, 1.4},
            {5.0, 2.0, 3.5, 1.0}, {5.9, 3.0, 4.2, 1.5},
            {6.0, 2.2, 4.0, 1.0}, {6.1, 2.9, 4.7, 1.4},
            {5.6, 2.9, 3.6, 1.3}, {6.7, 3.1, 4.4, 1.4},
            {5.6, 3.0, 4.5, 1.5}, {5.8, 2.7, 4.1, 1.0},
            {6.2, 2.2, 4.5, 1.5}, {5.6, 2.5, 3.9, 1.1},
            {5.9, 3.2, 4.8, 1.8}, {6.1, 2.8, 4.0, 1.3},
            {6.3, 2.5, 4.9, 1.5}, {6.1, 2.8, 4.7, 1.2},
            {6.4, 2.9, 4.3, 1.3}, {6.6, 3.0, 4.4, 1.4},
            {6.8, 2.8, 4.8, 1.4}, {6.7, 3.0, 5.0, 1.7},
            {6.0, 2.9, 4.5, 1.5}, {5.7, 2.6, 3.5, 1.0},
            {5.5, 2.4, 3.8, 1.1}, {5.5, 2.4, 3.7, 1.0},
            {5.8, 2.7, 3.9, 1.2}, {6.0, 2.7, 5.1, 1.6},
            {5.4, 3.0, 4.5, 1.5}, {6.0, 3.4, 4.5, 1.6},
            {6.7, 3.1, 4.7, 1.5}, {6.3, 2.3, 4.4, 1.3},
            {5.6, 3.0, 4.1, 1.3}, {5.5, 2.5, 4.0, 1.3},
            {5.5, 2.6, 4.4, 1.2}, {6.1, 3.0, 4.6, 1.4},
            {5.8, 2.6, 4.0, 1.2}, {5.0, 2.3, 3.3, 1.0},
            {5.6, 2.7, 4.2, 1.3}, {5.7, 3.0, 4.2, 1.2},
            {5.7, 2.9, 4.2, 1.3}, {6.2, 2.9, 4.3, 1.3},
            {5.1, 2.5, 3.0, 1.1}, {5.7, 2.8, 4.1, 1.3},
            {6.3, 3.3, 6.0, 2.5}, {5.8, 2.7, 5.1, 1.9},
            {7.1, 3.0, 5.9, 2.1}, {6.3, 2.9, 5.6, 1.8},
            {6.5, 3.0, 5.8, 2.2}, {7.6, 3.0, 6.6, 2.1},
            {4.9, 2.5, 4.5, 1.7}, {7.3, 2.9, 6.3, 1.8},
            {6.7, 2.5, 5.8, 1.8}, {7.2, 3.6, 6.1, 2.5},
            {6.5, 3.2, 5.1, 2.0}, {6.4, 2.7, 5.3, 1.9},
            {6.8, 3.0, 5.5, 2.1}, {5.7, 2.5, 5.0, 2.0},
            {5.8, 2.8, 5.1, 2.4}, {6.4, 3.2, 5.3, 2.3},
            {6.5, 3.0, 5.5, 1.8}, {7.7, 3.8, 6.7, 2.2},
            {7.7, 2.6, 6.9, 2.3}, {6.0, 2.2, 5.0, 1.5},
            {6.9, 3.2, 5.7, 2.3}, {5.6, 2.8, 4.9, 2.0},
            {7.7, 2.8, 6.7, 2.0}, {6.3, 2.7, 4.9, 1.8},
            {6.7, 3.3, 5.7, 2.1}, {7.2, 3.2, 6.0, 1.8},
            {6.2, 2.8, 4.8, 1.8}, {6.1, 3.0, 4.9, 1.8},
            {6.4, 2.8, 5.6, 2.1}, {7.2, 3.0, 5.8, 1.6},
            {7.4, 2.8, 6.1, 1.9}, {7.9, 3.8, 6.4, 2.0},
            {6.4, 2.8, 5.6, 2.2}, {6.3, 2.8, 5.1, 1.5},
            {6.1, 2.6, 5.6, 1.4}, {7.7, 3.0, 6.1, 2.3},
            {6.3, 3.4, 5.6, 2.4}, {6.4, 3.1, 5.5, 1.8},
            {6.0, 3.0, 4.8, 1.8}, {6.9, 3.1, 5.4, 2.1},
            {6.7, 3.1, 5.6, 2.4}, {6.9, 3.1, 5.1, 2.3},
            {5.8, 2.7, 5.1, 1.9}, {6.8, 3.2, 5.9, 2.3},
            {6.7, 3.3, 5.7, 2.5}, {6.7, 3.0, 5.2, 2.3},
            {6.3, 2.5, 5.0, 1.9}, {6.5, 3.0, 5.2, 2.0},
            {6.2, 3.4, 5.4, 2.3}, {5.9, 3.0, 5.1, 1.8}
        };
        
        Dissimilarities dist = new Dissimilarities(irisData);
        dist.setScalingOption(Dissimilarities.STD_DEV);
        dist.compute();
        
        ClusterHierarchical clink =
                new ClusterHierarchical(dist.getDistanceMatrix());
        clink.setMethod(ClusterHierarchical.LINKAGE_AVG_WITHIN_CLUSTERS);
        clink.compute();
        
        
        int nClusters = 5;
        int[] iclus = clink.getClusterMembership(nClusters);
        int[] nclus = clink.getObsPerCluster(nClusters);
        System.out.println("Cluster Membership");
        for (int i = 0; i < 15; i++){
            for (int j = 0; j < 10; j++)
                System.out.print(iclus[i*10+j] + " ");
            System.out.println();
        }
        
        System.out.println("\nObservations Per Cluster");
        for (int i = 0; i < nClusters; i++)
            System.out.print(nclus[i] + " ");
        System.out.println();
    }
}

Output

Cluster Membership
5 5 5 5 5 5 5 5 5 5 
5 5 5 5 5 5 5 5 5 5 
5 5 5 5 5 5 5 5 5 5 
5 5 5 5 5 5 5 5 5 5 
5 5 5 5 5 5 5 5 5 5 
3 3 3 4 3 4 3 4 3 4 
4 3 4 3 4 3 4 4 4 4 
3 3 3 3 3 3 3 3 3 4 
4 4 4 3 4 3 3 4 4 4 
4 3 4 4 4 4 4 3 4 4 
2 3 2 3 2 1 4 1 3 2 
2 3 2 3 3 2 3 2 1 4 
2 3 1 3 2 1 3 3 3 1 
1 2 3 3 3 1 2 3 3 2 
2 2 3 2 2 2 3 3 2 3 

Observations Per Cluster
8 19 44 29 50 
Link to Java source.