Skip to content

2. Basic example with pre‐processing

Jonas Schaub edited this page Nov 12, 2025 · 1 revision

In this example, the input matrix needs to be pre-processed first because its values are not in the range [0, 1].

// Prepare your data as a 2D float array
// Each row represents a data vector
float[][] dataMatrix = {
        {10f, 20f, 30f},
        {20f, 10f, 40f},
        {90f, 80f, 70f},
        {80f, 90f, 60f},
        {15f, 25f, 35f},
        {85f, 75f, 65f},
        {5f, 15f, 25f},
        {95f, 85f, 75f},
        {12f, 22f, 32f},
        {88f, 78f, 68f}
};

// Configure clustering parameters
//Vigilance parameter in interval [0,1]
float vigilance = 0.5f;
//Maximum number of clusters in interval [2, number of data row vectors of getDataMatrix]
int maximumNumberOfClusters = 10;
//default value
int maximumNumberOfEpochs = 10;
//default value
float convergenceThreshold = 0.99f;
//default value
float learningParameter = 0.01f;
//default value
float offsetForContrastEnhancement = 1.0f;
//default value
long randomSeed = 1L;
//*preprocess data because it is not in the range [0,1]*
boolean isDataPreprocessing = true;

// Validate data matrix (same length in all rows, no empty rows, etc.)
if (Utils.isDataMatrixValid(dataMatrix)) {
    // Create ART-2a kernel
    Art2aKernel art2aKernel = new Art2aKernel(
            dataMatrix,
            maximumNumberOfClusters,
            maximumNumberOfEpochs,
            convergenceThreshold,
            learningParameter,
            offsetForContrastEnhancement,
            randomSeed,
            isDataPreprocessing
    );

    // Perform clustering with set vigilance parameter and do the determination 
    //  of which cluster is closest to the new data point sequentially
    Art2aResult result = art2aKernel.getClusterResult(vigilance, false);

    // Access results
    int numberOfClusters = result.getNumberOfDetectedClusters();
    System.out.println("Number of epochs: " + result.getNumberOfEpochs());
    System.out.println("Is converged: " + result.isConverged());

    // Get cluster information
    for (int i = 0; i < numberOfClusters; i++) {
        System.out.println("Cluster " + i + ":");
        System.out.println("\tSize: " + result.getClusterSize(i));
        System.out.println("\tMembers: " + Arrays.toString(result.getDataVectorIndicesOfCluster(i)));
        System.out.println("\tRepresentative Index: " + result.getClusterRepresentativeIndex(i));
    } 
}


Output:

Number of epochs: 2
Is converged: true
Cluster 0:
	Size: 1
	Members: [6]
	Representative Index: 6
Cluster 1:
	Size: 9
	Members: [0, 1, 2, 3, 4, 5, 7, 8, 9]
	Representative Index: 7

Clone this wiki locally