[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