diff options
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/datasource/filter/transform/ClassicMultidimensionalScalingTransform.java')
-rw-r--r-- | src/de/lmu/ifi/dbs/elki/datasource/filter/transform/ClassicMultidimensionalScalingTransform.java | 33 |
1 files changed, 16 insertions, 17 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/datasource/filter/transform/ClassicMultidimensionalScalingTransform.java b/src/de/lmu/ifi/dbs/elki/datasource/filter/transform/ClassicMultidimensionalScalingTransform.java index d646b489..32024581 100644 --- a/src/de/lmu/ifi/dbs/elki/datasource/filter/transform/ClassicMultidimensionalScalingTransform.java +++ b/src/de/lmu/ifi/dbs/elki/datasource/filter/transform/ClassicMultidimensionalScalingTransform.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.datasource.filter.transform; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2013 + Copyright (C) 2014 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -30,8 +30,9 @@ import de.lmu.ifi.dbs.elki.data.NumberVector; import de.lmu.ifi.dbs.elki.data.type.SimpleTypeInformation; import de.lmu.ifi.dbs.elki.data.type.VectorFieldTypeInformation; import de.lmu.ifi.dbs.elki.datasource.bundle.MultipleObjectsBundle; +import de.lmu.ifi.dbs.elki.datasource.filter.FilterUtil; import de.lmu.ifi.dbs.elki.datasource.filter.ObjectFilter; -import de.lmu.ifi.dbs.elki.distance.distancefunction.PrimitiveDoubleDistanceFunction; +import de.lmu.ifi.dbs.elki.distance.distancefunction.PrimitiveDistanceFunction; import de.lmu.ifi.dbs.elki.distance.distancefunction.minkowski.SquaredEuclideanDistanceFunction; import de.lmu.ifi.dbs.elki.logging.Logging; import de.lmu.ifi.dbs.elki.logging.progress.FiniteProgress; @@ -54,6 +55,8 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter; * * @author Erich Schubert * + * @apiviz.composedOf SingularValueDecomposition + * * @param <O> Data type */ @Alias({ "mds" }) @@ -66,7 +69,7 @@ public class ClassicMultidimensionalScalingTransform<O> implements ObjectFilter /** * Distance function to use. */ - PrimitiveDoubleDistanceFunction<? super O> dist = null; + PrimitiveDistanceFunction<? super O> dist = null; /** * Target dimensionality @@ -79,7 +82,7 @@ public class ClassicMultidimensionalScalingTransform<O> implements ObjectFilter * @param tdim Target dimensionality. * @param dist Distance function to use. */ - public ClassicMultidimensionalScalingTransform(int tdim, PrimitiveDoubleDistanceFunction<? super O> dist) { + public ClassicMultidimensionalScalingTransform(int tdim, PrimitiveDistanceFunction<? super O> dist) { super(); this.tdim = tdim; this.dist = dist; @@ -105,14 +108,14 @@ public class ClassicMultidimensionalScalingTransform<O> implements ObjectFilter // Get the replacement type information @SuppressWarnings("unchecked") final List<O> castColumn = (List<O>) column; - NumberVector.Factory<? extends NumberVector<?>, ?> factory = null; + NumberVector.Factory<? extends NumberVector> factory = null; { if (type instanceof VectorFieldTypeInformation) { final VectorFieldTypeInformation<?> ctype = (VectorFieldTypeInformation<?>) type; // Note two-step cast, to make stricter compilers happy. @SuppressWarnings("unchecked") - final VectorFieldTypeInformation<? extends NumberVector<?>> vtype = (VectorFieldTypeInformation<? extends NumberVector<?>>) ctype; - factory = (NumberVector.Factory<? extends NumberVector<?>, ?>) vtype.getFactory(); + final VectorFieldTypeInformation<? extends NumberVector> vtype = (VectorFieldTypeInformation<? extends NumberVector>) ctype; + factory = FilterUtil.guessFactory(vtype); } else { factory = DoubleVector.FACTORY; } @@ -128,16 +131,12 @@ public class ClassicMultidimensionalScalingTransform<O> implements ObjectFilter final O ox = castColumn.get(x); for (int y = x + 1; y < size; y++) { final O oy = castColumn.get(y); - double distance = Math.abs(dist.doubleDistance(ox, oy)); + double distance = Math.abs(dist.distance(ox, oy)); imat[x][y] = distance; - if (dprog != null) { - dprog.incrementProcessed(LOG); - } + LOG.incrementProcessed(dprog); } } - if (dprog != null) { - dprog.ensureCompleted(LOG); - } + LOG.ensureCompleted(dprog); } // Adjust distance matrix: if (dist instanceof SquaredEuclideanDistanceFunction) { @@ -230,7 +229,7 @@ public class ClassicMultidimensionalScalingTransform<O> implements ObjectFilter * * @apiviz.exclude */ - public static class Parameterizer<O extends NumberVector<?>> extends AbstractParameterizer { + public static class Parameterizer<O extends NumberVector> extends AbstractParameterizer { /** * Desired dimensionality. */ @@ -249,7 +248,7 @@ public class ClassicMultidimensionalScalingTransform<O> implements ObjectFilter /** * Distance function to use. */ - PrimitiveDoubleDistanceFunction<? super O> dist = null; + PrimitiveDistanceFunction<? super O> dist = null; @Override protected void makeOptions(Parameterization config) { @@ -260,7 +259,7 @@ public class ClassicMultidimensionalScalingTransform<O> implements ObjectFilter tdim = dimP.intValue(); } - ObjectParameter<PrimitiveDoubleDistanceFunction<? super O>> distP = new ObjectParameter<>(DISTANCE_ID, PrimitiveDoubleDistanceFunction.class, SquaredEuclideanDistanceFunction.class); + ObjectParameter<PrimitiveDistanceFunction<? super O>> distP = new ObjectParameter<>(DISTANCE_ID, PrimitiveDistanceFunction.class, SquaredEuclideanDistanceFunction.class); if (config.grab(distP)) { dist = distP.instantiateClass(config); } |