public CMM_GTAnalysis()

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");

  }