Uploaded image for project: 'Commons Math'
  1. Commons Math
  2. MATH-1165

Rare case for updateMembershipMatrix() in FuzzyKMeansClusterer

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: 3.3
    • Fix Version/s: 3.4
    • Labels:

      Description

      The function updateMembershipMatrix() in FuzzyKMeansClusterer assigns the points to the cluster with the highest membership. Consider the following case:

      If the distance between a point and the cluster center is zero, then we will have a cluster membership of one, and all other membership values will be zero.

      So the if condition:
      if (membershipMatrix[i][j] > maxMembership) {
      maxMembership = membershipMatrix[i][j];
      newCluster = j;
      }
      will never be true during the for loop and newCluster will remain -1. This will throw an exception because of the line:
      clusters.get(newCluster)
      .addPoint(point);

      Adding the following condition can solve the problem:
      double d;
      if (sum == 0)
      d = 1;
      else
      d = 1.0/sum;

        Attachments

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              pasmod Pashutan Modaresi
            • Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Time Tracking

                Estimated:
                Original Estimate - 1h
                1h
                Remaining:
                Remaining Estimate - 1h
                1h
                Logged:
                Time Spent - Not Specified
                Not Specified