コード例 #1
0
  public Dendrogram cluster() {

    Dendrogram dnd = new Dendrogram("Distance");
    double d = 0.0;

    // initially load all elements as individual clusters
    for (DataPoint e : elements) {
      Cluster c = new Cluster(e);
      allClusters.add(c);
    }

    dnd.addLevel(String.valueOf(d), allClusters.getAllClusters());

    d = 1.0;

    while (allClusters.size() > 1) {
      int K = allClusters.size();
      mergeClusters(d);
      // it is possible that there were no clusters to merge for current
      // d.
      if (K > allClusters.size()) {
        dnd.addLevel(String.valueOf(d), allClusters.getAllClusters());
        K = allClusters.size();
      }

      d = d + 0.5;
    }
    return dnd;
  }
コード例 #2
0
  /**
   * Implements the core algorithm.
   *
   * @return
   */
  protected Dendrogram getClusteringDendrogram() {
    // 1. inizializza la matrice di prossimità con un cluster per ogni documento
    ProximityMatrix m = this.initMatrix();
    Dendrogram dendrogram = this.initDendrogram();

    for (int i = 0; i < m.getClustersCount() - 1; i++) {
      // 2. cerca la coppia di cluster più vicini (single link - distanza punti più vicini)
      ICluster[] nearestClusters = m.getNearestClusters();
      // TODO DEBUG
      float dist = m.getClustersDistance(nearestClusters[0], nearestClusters[1]);
      int c1Index = m.getClusterIndex(nearestClusters[0]),
          c2Index = m.getClusterIndex(nearestClusters[1]);
      // 3. merge dei cluster trovati
      ICluster mergedCluster = this.mergeCluster(m, nearestClusters[0], nearestClusters[1]);

      System.out.println("\n\n" + m);
      System.out.println(
          "\n\nMerging clusters (distance = "
              + dist
              + "):\n"
              + nearestClusters[0]
              + "\n"
              + nearestClusters[1] /* + "\nto:\n" + mergedCluster*/);
      System.out.println("Indexes: " + c1Index + " " + c2Index);

      dendrogram.add(mergedCluster, nearestClusters[0], nearestClusters[1]);

      // 4. procede dal punto 2 per (n-1) iterazioni (altezza dendogramma pari a n = numero di
      // documenti)
    }

    return dendrogram;
  }
コード例 #3
0
  public static void main(String[] args) {
    // Define data
    DataPoint[] elements = new DataPoint[5];
    elements[0] = new DataPoint("A", new double[] {});
    elements[1] = new DataPoint("B", new double[] {});
    elements[2] = new DataPoint("C", new double[] {});
    elements[3] = new DataPoint("D", new double[] {});
    elements[4] = new DataPoint("E", new double[] {});

    double[][] a =
        new double[][] {
          {0, 1, 2, 2, 3}, {1, 0, 2, 4, 3}, {2, 2, 0, 1, 5}, {2, 4, 1, 0, 3}, {3, 3, 5, 3, 0}
        };

    AverageLinkAlgorithm ca = new AverageLinkAlgorithm(elements, a);
    Dendrogram dnd = ca.cluster();
    dnd.printAll();
  }