예제 #1
0
  /**
   * calculate the dunn index between two clusters
   *
   * @param clusters clusters
   * @param dataset dataset
   * @return dunn index
   */
  public double calculateDunnIndex() {
    double minDI = Double.MAX_VALUE;
    for (int i = 0; i < clusters.size(); i++) {
      Cluster ci = clusters.get(i);
      if (!ci.getIsActive()) continue;
      if (ci.getPointsIDs().size() < 30) continue;

      for (int j = 0; j < clusters.size(); j++) {
        Cluster cj = clusters.get(j);
        if (ci.getID() == cj.getID() || !cj.getIsActive()) continue;
        if (cj.getPointsIDs().size() < 30) continue;

        double minDistBetCiCj = calculateMinDistanceBetweenTwoClusters(ci, cj);
        double DIij = minDistBetCiCj / this.maxClusterSize;
        if (DIij < minDI) {
          minDI = DIij;
        }
      }
    }
    return minDI;
  }