diff options
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/algorithm')
3 files changed, 18 insertions, 10 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/algorithm/clustering/DeLiClu.java b/src/de/lmu/ifi/dbs/elki/algorithm/clustering/DeLiClu.java index d4d6d20a..ca401ddc 100644 --- a/src/de/lmu/ifi/dbs/elki/algorithm/clustering/DeLiClu.java +++ b/src/de/lmu/ifi/dbs/elki/algorithm/clustering/DeLiClu.java @@ -153,7 +153,7 @@ public class DeLiClu<NV extends NumberVector<NV, ?>, D extends Distance<D>> exte clusterOrder.add(startID, null, distFunction.getDistanceFactory().infiniteDistance()); int numHandled = 1; index.setHandled(startID, relation.get(startID)); - SpatialDirectoryEntry rootEntry = (SpatialDirectoryEntry)index.getRootEntry(); + SpatialDirectoryEntry rootEntry = (SpatialDirectoryEntry) index.getRootEntry(); SpatialObjectPair spatialObjectPair = new SpatialObjectPair(distFunction.getDistanceFactory().nullDistance(), rootEntry, rootEntry, true); heap.add(spatialObjectPair); @@ -217,8 +217,8 @@ public class DeLiClu<NV extends NumberVector<NV, ?>, D extends Distance<D>> exte * @param knns the knn list */ private void expandNodes(DeLiCluTree index, SpatialPrimitiveDistanceFunction<NV, D> distFunction, SpatialObjectPair nodePair, DataStore<KNNList<D>> knns) { - DeLiCluNode node1 = index.getNode(((SpatialDirectoryEntry)nodePair.entry1).getPageID()); - DeLiCluNode node2 = index.getNode(((SpatialDirectoryEntry)nodePair.entry2).getPageID()); + DeLiCluNode node1 = index.getNode(((SpatialDirectoryEntry) nodePair.entry1).getPageID()); + DeLiCluNode node2 = index.getNode(((SpatialDirectoryEntry) nodePair.entry2).getPageID()); if(node1.isLeaf()) { expandLeafNodes(distFunction, node1, node2, knns); @@ -238,6 +238,9 @@ public class DeLiClu<NV extends NumberVector<NV, ?>, D extends Distance<D>> exte * @param node2 the second node */ private void expandDirNodes(SpatialPrimitiveDistanceFunction<NV, D> distFunction, DeLiCluNode node1, DeLiCluNode node2) { + if(logger.isDebuggingFinest()) { + logger.debugFinest("ExpandDirNodes: " + node1.getPageID() + " + " + node2.getPageID()); + } int numEntries_1 = node1.getNumEntries(); int numEntries_2 = node2.getNumEntries(); @@ -271,6 +274,9 @@ public class DeLiClu<NV extends NumberVector<NV, ?>, D extends Distance<D>> exte * @param knns the knn list */ private void expandLeafNodes(SpatialPrimitiveDistanceFunction<NV, D> distFunction, DeLiCluNode node1, DeLiCluNode node2, DataStore<KNNList<D>> knns) { + if(logger.isDebuggingFinest()) { + logger.debugFinest("ExpandLeafNodes: " + node1.getPageID() + " + " + node2.getPageID()); + } int numEntries_1 = node1.getNumEntries(); int numEntries_2 = node2.getNumEntries(); @@ -304,7 +310,7 @@ public class DeLiClu<NV extends NumberVector<NV, ?>, D extends Distance<D>> exte * @param knns the knn list */ private void reinsertExpanded(SpatialPrimitiveDistanceFunction<NV, D> distFunction, DeLiCluTree index, List<TreeIndexPathComponent<DeLiCluEntry>> path, DataStore<KNNList<D>> knns) { - SpatialDirectoryEntry rootEntry = (SpatialDirectoryEntry)path.remove(0).getEntry(); + SpatialDirectoryEntry rootEntry = (SpatialDirectoryEntry) path.remove(0).getEntry(); reinsertExpanded(distFunction, index, path, 0, rootEntry, knns); } diff --git a/src/de/lmu/ifi/dbs/elki/algorithm/outlier/KNNOutlier.java b/src/de/lmu/ifi/dbs/elki/algorithm/outlier/KNNOutlier.java index e8097518..fa89f954 100644 --- a/src/de/lmu/ifi/dbs/elki/algorithm/outlier/KNNOutlier.java +++ b/src/de/lmu/ifi/dbs/elki/algorithm/outlier/KNNOutlier.java @@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.distance.distancefunction.DistanceFunction; import de.lmu.ifi.dbs.elki.distance.distancevalue.NumberDistance;
import de.lmu.ifi.dbs.elki.logging.Logging;
import de.lmu.ifi.dbs.elki.logging.progress.FiniteProgress;
+import de.lmu.ifi.dbs.elki.math.DoubleMinMax;
import de.lmu.ifi.dbs.elki.database.relation.MaterializedRelation;
import de.lmu.ifi.dbs.elki.result.outlier.BasicOutlierScoreMeta;
import de.lmu.ifi.dbs.elki.result.outlier.OutlierResult;
@@ -113,7 +114,7 @@ public class KNNOutlier<O, D extends NumberDistance<D, ?>> extends AbstractDista }
FiniteProgress progressKNNDistance = logger.isVerbose() ? new FiniteProgress("kNN distance for objects", relation.size(), logger) : null;
- double maxodegree = 0;
+ DoubleMinMax minmax = new DoubleMinMax();
WritableDataStore<Double> knno_score = DataStoreUtil.makeStorage(relation.getDBIDs(), DataStoreFactory.HINT_STATIC, Double.class);
// compute distance to the k nearest neighbor.
for(DBID id : distanceQuery.getRelation().iterDBIDs()) {
@@ -124,7 +125,7 @@ public class KNNOutlier<O, D extends NumberDistance<D, ?>> extends AbstractDista double dkn = knns.get(last).getDistance().doubleValue();
knno_score.put(id, dkn);
- maxodegree = Math.max(maxodegree, dkn);
+ minmax.put(dkn);
if(progressKNNDistance != null) {
progressKNNDistance.incrementProcessed(logger);
@@ -134,7 +135,7 @@ public class KNNOutlier<O, D extends NumberDistance<D, ?>> extends AbstractDista progressKNNDistance.ensureCompleted(logger);
}
Relation<Double> scoreres = new MaterializedRelation<Double>("kNN Outlier Score", "knn-outlier", TypeUtil.DOUBLE, knno_score, relation.getDBIDs());
- OutlierScoreMeta meta = new BasicOutlierScoreMeta(Double.NaN, maxodegree, 0.0, Double.POSITIVE_INFINITY);
+ OutlierScoreMeta meta = new BasicOutlierScoreMeta(minmax.getMin(), minmax.getMax(), 0.0, Double.POSITIVE_INFINITY, 0.0);
return new OutlierResult(meta, scoreres);
}
diff --git a/src/de/lmu/ifi/dbs/elki/algorithm/outlier/KNNWeightOutlier.java b/src/de/lmu/ifi/dbs/elki/algorithm/outlier/KNNWeightOutlier.java index 17292a9f..02e0789b 100644 --- a/src/de/lmu/ifi/dbs/elki/algorithm/outlier/KNNWeightOutlier.java +++ b/src/de/lmu/ifi/dbs/elki/algorithm/outlier/KNNWeightOutlier.java @@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.distance.distancefunction.DistanceFunction; import de.lmu.ifi.dbs.elki.distance.distancevalue.NumberDistance;
import de.lmu.ifi.dbs.elki.logging.Logging;
import de.lmu.ifi.dbs.elki.logging.progress.FiniteProgress;
+import de.lmu.ifi.dbs.elki.math.DoubleMinMax;
import de.lmu.ifi.dbs.elki.database.relation.MaterializedRelation;
import de.lmu.ifi.dbs.elki.result.outlier.BasicOutlierScoreMeta;
import de.lmu.ifi.dbs.elki.result.outlier.OutlierResult;
@@ -113,7 +114,7 @@ public class KNNWeightOutlier<O, D extends NumberDistance<D, ?>> extends Abstrac }
FiniteProgress progressKNNWeight = logger.isVerbose() ? new FiniteProgress("KNNWOD_KNNWEIGHT for objects", relation.size(), logger) : null;
- double maxweight = 0;
+ DoubleMinMax minmax = new DoubleMinMax();
// compute distance to the k nearest neighbor. n objects with the highest
// distance are flagged as outliers
@@ -130,7 +131,7 @@ public class KNNWeightOutlier<O, D extends NumberDistance<D, ?>> extends Abstrac double doubleSkn = skn.getValue().doubleValue();
knnw_score.put(id, doubleSkn);
- maxweight = Math.max(maxweight, doubleSkn);
+ minmax.put(doubleSkn);
if(progressKNNWeight != null) {
progressKNNWeight.incrementProcessed(logger);
@@ -141,7 +142,7 @@ public class KNNWeightOutlier<O, D extends NumberDistance<D, ?>> extends Abstrac }
Relation<Double> res = new MaterializedRelation<Double>("Weighted kNN Outlier Score", "knnw-outlier", TypeUtil.DOUBLE, knnw_score, relation.getDBIDs());
- OutlierScoreMeta meta = new BasicOutlierScoreMeta(Double.NaN, maxweight, 0.0, Double.POSITIVE_INFINITY);
+ OutlierScoreMeta meta = new BasicOutlierScoreMeta(minmax.getMin(), minmax.getMax(), 0.0, Double.POSITIVE_INFINITY, 0.0);
return new OutlierResult(meta, res);
}
|