[mlpack-git] master: Minimal fix for bug in Elkan implementation. (04b0c08)

gitdub at mlpack.org gitdub at mlpack.org
Fri Mar 25 17:50:01 EDT 2016


Repository : https://github.com/mlpack/mlpack
On branch  : master
Link       : https://github.com/mlpack/mlpack/compare/a0f1dd5632004b26cd3592e6ceaa455792df8c3a...9e4e126589d19ddbaaaebec256c77d1f3eb75ce2

>---------------------------------------------------------------

commit 04b0c0867f13d88edff8419d7deaec2315b54258
Author: Erich Schubert <kno10 at users.noreply.github.com>
Date:   Fri Mar 25 22:50:01 2016 +0100

    Minimal fix for bug in Elkan implementation.
    
    Kill only one cluster, not all.


>---------------------------------------------------------------

04b0c0867f13d88edff8419d7deaec2315b54258
 src/mlpack/methods/kmeans/elkan_kmeans_impl.hpp | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/src/mlpack/methods/kmeans/elkan_kmeans_impl.hpp b/src/mlpack/methods/kmeans/elkan_kmeans_impl.hpp
index d4a1b1f..c2682f7 100644
--- a/src/mlpack/methods/kmeans/elkan_kmeans_impl.hpp
+++ b/src/mlpack/methods/kmeans/elkan_kmeans_impl.hpp
@@ -153,15 +153,14 @@ double ElkanKMeans<MetricType, MatType>::Iterate(const arma::mat& centroids,
   double cNorm = 0.0; // Cluster movement for residual.
   for (size_t c = 0; c < centroids.n_cols; ++c)
   {
-    if (counts[c] > 0) {
+    if (counts[c] > 0)
       newCentroids.col(c) /= counts[c];
-      moveDistances(c) = metric.Evaluate(newCentroids.col(c), centroids.col(c));
-      cNorm += std::pow(moveDistances(c), 2.0);
-      distanceCalculations++;
-    } else {
-      newCentroids.col(c) = centroids.col(c); // Keep old centroid.
-      moveDistances(c) = 0.0;
-    }
+    else
+      newCentroids.col(c).fill(DBL_MAX); // Fill with invalid value.
+
+    moveDistances(c) = metric.Evaluate(newCentroids.col(c), centroids.col(c));
+    cNorm += std::pow(moveDistances(c), 2.0);
+    distanceCalculations++;
   }
 
   for (size_t i = 0; i < dataset.n_cols; ++i)




More information about the mlpack-git mailing list