diff options
author | Andrej Shadura <andrewsh@debian.org> | 2019-03-09 22:30:38 +0000 |
---|---|---|
committer | Andrej Shadura <andrewsh@debian.org> | 2019-03-09 22:30:38 +0000 |
commit | 14a486343aef55f97f54082d6b542dedebf6f3ba (patch) | |
tree | 000fcc4968578771ad265079eef7617d66de2cda /src/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMediansLloyd.java | |
parent | 8300861dc4c62c5567a4e654976072f854217544 (diff) |
Import Upstream version 0.6.0
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMediansLloyd.java')
-rw-r--r-- | src/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMediansLloyd.java | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMediansLloyd.java b/src/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMediansLloyd.java index cc7aaa9e..0a97c4d3 100644 --- a/src/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMediansLloyd.java +++ b/src/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMediansLloyd.java @@ -31,6 +31,9 @@ import de.lmu.ifi.dbs.elki.data.Clustering; import de.lmu.ifi.dbs.elki.data.NumberVector; import de.lmu.ifi.dbs.elki.data.model.MeanModel; import de.lmu.ifi.dbs.elki.database.Database; +import de.lmu.ifi.dbs.elki.database.datastore.DataStoreFactory; +import de.lmu.ifi.dbs.elki.database.datastore.DataStoreUtil; +import de.lmu.ifi.dbs.elki.database.datastore.WritableIntegerDataStore; import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil; import de.lmu.ifi.dbs.elki.database.ids.ModifiableDBIDs; import de.lmu.ifi.dbs.elki.database.relation.Relation; @@ -88,15 +91,16 @@ public class KMediansLloyd<V extends NumberVector<?>, D extends Distance<D>> ext // Setup cluster assignment store List<ModifiableDBIDs> clusters = new ArrayList<>(); for (int i = 0; i < k; i++) { - clusters.add(DBIDUtil.newHashSet(relation.size() / k)); + clusters.add(DBIDUtil.newHashSet((int) (relation.size() * 2. / k))); } + WritableIntegerDataStore assignment = DataStoreUtil.makeIntegerStorage(relation.getDBIDs(), DataStoreFactory.HINT_TEMP | DataStoreFactory.HINT_HOT, -1); IndefiniteProgress prog = LOG.isVerbose() ? new IndefiniteProgress("K-Medians iteration", LOG) : null; for (int iteration = 0; maxiter <= 0 || iteration < maxiter; iteration++) { if (prog != null) { prog.incrementProcessed(LOG); } - boolean changed = assignToNearestCluster(relation, medians, clusters); + boolean changed = assignToNearestCluster(relation, medians, clusters, assignment); // Stop if no cluster assignment changed. if (!changed) { break; |