-
Notifications
You must be signed in to change notification settings - Fork 2
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