in samoa-api/src/main/java/org/apache/samoa/evaluation/measures/CMM_GTAnalysis.java [452:529]
public CMM_GTAnalysis(Clustering trueClustering, ArrayList<DataPoint> points, boolean enableClassMerge) {
if (debug)
System.out.println("GT Analysis Debug Output");
noiseErrorByModel = 0;
pointErrorByModel = 0;
if (!enableClassMerge) {
tauConnection = 1.0;
}
lamdaConn = -Math.log(lambdaConnRefXValue) / Math.log(2) / lambdaConnX;
this.gtClustering = trueClustering;
numPoints = points.size();
numDims = points.get(0).numAttributes() - 1;
numGTClusters = gtClustering.size();
// init mappings between work and true labels
mapTrueLabelToWorkLabel = new HashMap<Integer, Integer>();
// set up base of new clustering
gt0Clusters = new ArrayList<GTCluster>();
int numWorkClasses = 0;
// create label to worklabel mapping as real labels can be just a set of
// unordered integers
for (int i = 0; i < numGTClusters; i++) {
int label = (int) gtClustering.get(i).getGroundTruth();
if (!mapTrueLabelToWorkLabel.containsKey(label)) {
gt0Clusters.add(new GTCluster(numWorkClasses, label, i));
mapTrueLabelToWorkLabel.put(label, numWorkClasses);
numWorkClasses++;
}
else {
gt0Clusters.get(mapTrueLabelToWorkLabel.get(label)).clusterRepresentations.add(i);
}
}
numGTClasses = numWorkClasses;
mergeMap = new int[numGTClasses];
for (int i = 0; i < numGTClasses; i++) {
mergeMap[i] = i;
}
// create cmd point wrapper instances
cmmpoints = new ArrayList<CMMPoint>();
for (int p = 0; p < points.size(); p++) {
CMMPoint cmdp = new CMMPoint(points.get(p), p);
cmmpoints.add(cmdp);
}
// split points up into their GTClusters and Noise (according to class
// labels)
noise = new ArrayList<Integer>();
for (int p = 0; p < numPoints; p++) {
if (cmmpoints.get(p).isNoise()) {
noise.add(p);
}
else {
gt0Clusters.get(cmmpoints.get(p).workclass()).points.add(p);
}
}
// calculate initial knnMean and knnDev
for (GTCluster gtc : gt0Clusters) {
gtc.calculateKnn();
}
// calculate cluster connections
calculateGTClusterConnections();
// calculate point connections with own clusters
calculateGTPointQualities();
if (debug)
System.out.println("GT Analysis Debug End");
}