summaryrefslogtreecommitdiff
path: root/src/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/SlopeDimensionSimilarity.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/SlopeDimensionSimilarity.java')
-rw-r--r--src/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/SlopeDimensionSimilarity.java32
1 files changed, 17 insertions, 15 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/SlopeDimensionSimilarity.java b/src/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/SlopeDimensionSimilarity.java
index 1eb62189..b48a2410 100644
--- a/src/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/SlopeDimensionSimilarity.java
+++ b/src/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/SlopeDimensionSimilarity.java
@@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.math.dimensionsimilarity;
This file is part of ELKI:
Environment for Developing KDD-Applications Supported by Index-Structures
- Copyright (C) 2012
+ Copyright (C) 2014
Ludwig-Maximilians-Universität München
Lehr- und Forschungseinheit für Datenbanksysteme
ELKI Development Team
@@ -28,10 +28,9 @@ import de.lmu.ifi.dbs.elki.database.Database;
import de.lmu.ifi.dbs.elki.database.ids.DBIDIter;
import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
import de.lmu.ifi.dbs.elki.database.relation.Relation;
-import de.lmu.ifi.dbs.elki.utilities.DatabaseUtil;
+import de.lmu.ifi.dbs.elki.database.relation.RelationUtil;
import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
-import de.lmu.ifi.dbs.elki.utilities.pairs.Pair;
/**
* Arrange dimensions based on the entropy of the slope spectrum.
@@ -43,12 +42,17 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.Pair;
* Proceedings of the 2013 ACM International Conference on Management of Data
* (SIGMOD), New York City, NY, 2013.
* </p>
- *
+ *
+ * TODO: shouldn't this be normalized by the single-dimension entropies or so?
+ *
* @author Erich Schubert
* @author Robert Rödler
*/
-@Reference(authors = "Elke Achtert, Hans-Peter Kriegel, Erich Schubert, Arthur Zimek", title = "Interactive Data Mining with 3D-Parallel-Coordinate-Trees", booktitle = "Proc. of the 2013 ACM International Conference on Management of Data (SIGMOD)", url = "http://dx.doi.org/10.1145/2463676.2463696")
-public class SlopeDimensionSimilarity implements DimensionSimilarity<NumberVector<?>> {
+@Reference(authors = "Elke Achtert, Hans-Peter Kriegel, Erich Schubert, Arthur Zimek", //
+title = "Interactive Data Mining with 3D-Parallel-Coordinate-Trees", //
+booktitle = "Proc. of the 2013 ACM International Conference on Management of Data (SIGMOD)", //
+url = "http://dx.doi.org/10.1145/2463676.2463696")
+public class SlopeDimensionSimilarity implements DimensionSimilarity<NumberVector> {
/**
* Static instance.
*/
@@ -77,21 +81,19 @@ public class SlopeDimensionSimilarity implements DimensionSimilarity<NumberVecto
}
@Override
- public void computeDimensionSimilarites(Database database, Relation<? extends NumberVector<?>> relation, DBIDs subset, DimensionSimilarityMatrix matrix) {
+ public void computeDimensionSimilarites(Database database, Relation<? extends NumberVector> relation, DBIDs subset, DimensionSimilarityMatrix matrix) {
final int dim = matrix.size();
final int size = subset.size();
// FIXME: Get/keep these statistics in the relation, or compute for the
// sample only.
- double[] off = new double[dim], scale = new double[dim];
+ double[] off, scale;
{
- Pair<? extends NumberVector<?>, ? extends NumberVector<?>> mm = DatabaseUtil.computeMinMax(relation);
- NumberVector<?> min = mm.first;
- NumberVector<?> max = mm.second;
+ double[][] mm = RelationUtil.computeMinMax(relation);
+ off = mm[0]; scale = mm[1];
for (int d = 0; d < dim; d++) {
- off[d] = min.doubleValue(matrix.dim(d));
- final double m = max.doubleValue(matrix.dim(d));
- scale[d] = (m > off[d]) ? 1. / (m - off[d]) : 1;
+ scale[d] -= off[d];
+ scale[d] = (scale[d] > 0.) ? 1. / scale[d] : 1.;
}
}
@@ -102,7 +104,7 @@ public class SlopeDimensionSimilarity implements DimensionSimilarity<NumberVecto
// Scratch buffer
double[] vec = new double[dim];
for (DBIDIter id = subset.iter(); id.valid(); id.advance()) {
- final NumberVector<?> obj = relation.get(id);
+ final NumberVector obj = relation.get(id);
// Map values to 0..1
for (int d = 0; d < dim; d++) {
vec[d] = (obj.doubleValue(matrix.dim(d)) - off[d]) * scale[d];