diff options
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace')
11 files changed, 54 insertions, 48 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/AbstractDimensionsSelectingDoubleDistanceFunction.java b/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/AbstractDimensionsSelectingDoubleDistanceFunction.java index 6bedd394..25cb6407 100644 --- a/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/AbstractDimensionsSelectingDoubleDistanceFunction.java +++ b/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/AbstractDimensionsSelectingDoubleDistanceFunction.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.distance.distancefunction.subspace; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2012 + Copyright (C) 2013 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team diff --git a/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/AbstractPreferenceVectorBasedCorrelationDistanceFunction.java b/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/AbstractPreferenceVectorBasedCorrelationDistanceFunction.java index e662bef1..f3a07639 100644 --- a/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/AbstractPreferenceVectorBasedCorrelationDistanceFunction.java +++ b/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/AbstractPreferenceVectorBasedCorrelationDistanceFunction.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.distance.distancefunction.subspace; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2012 + Copyright (C) 2013 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team diff --git a/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/DiSHDistanceFunction.java b/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/DiSHDistanceFunction.java index 77633578..7303797d 100644 --- a/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/DiSHDistanceFunction.java +++ b/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/DiSHDistanceFunction.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.distance.distancefunction.subspace; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2012 + Copyright (C) 2013 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -64,7 +64,7 @@ public class DiSHDistanceFunction extends AbstractPreferenceVectorBasedCorrelati // Generics (AFAICT) @SuppressWarnings("unchecked") DiSHPreferenceVectorIndex<T> indexinst = (DiSHPreferenceVectorIndex<T>) indexFactory.instantiate((Relation<NumberVector<?>>) database); - return new Instance<T>(database, indexinst, getEpsilon(), this); + return new Instance<>(database, indexinst, getEpsilon(), this); } /** diff --git a/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/DimensionSelectingDistanceFunction.java b/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/DimensionSelectingDistanceFunction.java index e1d52710..fe593f0a 100644 --- a/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/DimensionSelectingDistanceFunction.java +++ b/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/DimensionSelectingDistanceFunction.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.distance.distancefunction.subspace; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2012 + Copyright (C) 2013 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -23,14 +23,13 @@ package de.lmu.ifi.dbs.elki.distance.distancefunction.subspace; along with this program. If not, see <http://www.gnu.org/licenses/>. */ +import java.util.BitSet; + import de.lmu.ifi.dbs.elki.data.NumberVector; import de.lmu.ifi.dbs.elki.data.spatial.SpatialComparable; import de.lmu.ifi.dbs.elki.data.type.VectorFieldTypeInformation; import de.lmu.ifi.dbs.elki.data.type.VectorTypeInformation; -import de.lmu.ifi.dbs.elki.database.query.distance.SpatialPrimitiveDistanceQuery; -import de.lmu.ifi.dbs.elki.database.relation.Relation; -import de.lmu.ifi.dbs.elki.distance.distancefunction.AbstractPrimitiveDistanceFunction; -import de.lmu.ifi.dbs.elki.distance.distancefunction.SpatialPrimitiveDoubleDistanceFunction; +import de.lmu.ifi.dbs.elki.distance.distancefunction.AbstractSpatialDoubleDistanceNorm; import de.lmu.ifi.dbs.elki.distance.distancevalue.DoubleDistance; import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer; import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID; @@ -44,7 +43,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter; * * @author Elke Achtert */ -public class DimensionSelectingDistanceFunction extends AbstractPrimitiveDistanceFunction<NumberVector<?>, DoubleDistance> implements SpatialPrimitiveDoubleDistanceFunction<NumberVector<?>> { +public class DimensionSelectingDistanceFunction extends AbstractSpatialDoubleDistanceNorm implements DimensionSelectingSubspaceDistanceFunction<NumberVector<?>, DoubleDistance> { /** * Parameter for dimensionality. */ @@ -76,7 +75,7 @@ public class DimensionSelectingDistanceFunction extends AbstractPrimitiveDistanc */ @Override public double doubleDistance(NumberVector<?> v1, NumberVector<?> v2) { - if(dim >= v1.getDimensionality() || dim >= v2.getDimensionality() || dim < 0) { + if (dim >= v1.getDimensionality() || dim >= v2.getDimensionality() || dim < 0) { throw new IllegalArgumentException("Specified dimension to be considered " + "is larger that dimensionality of FeatureVectors:" + "\n first argument: " + v1.toString() + "\n second argument: " + v2.toString() + "\n dimension: " + dim); } @@ -86,20 +85,18 @@ public class DimensionSelectingDistanceFunction extends AbstractPrimitiveDistanc @Override public double doubleMinDist(SpatialComparable mbr1, SpatialComparable mbr2) { - if(dim >= mbr1.getDimensionality() || dim >= mbr2.getDimensionality() || dim < 0) { + if (dim >= mbr1.getDimensionality() || dim >= mbr2.getDimensionality() || dim < 0) { throw new IllegalArgumentException("Specified dimension to be considered " + "is larger that dimensionality of FeatureVectors:" + "\n first argument: " + mbr1.toString() + "\n second argument: " + mbr2.toString() + "\n dimension: " + dim); } double m1, m2; - if(mbr1.getMax(dim) < mbr2.getMin(dim)) { + if (mbr1.getMax(dim) < mbr2.getMin(dim)) { m1 = mbr1.getMax(dim); m2 = mbr2.getMin(dim); - } - else if(mbr1.getMin(dim) > mbr2.getMax(dim)) { + } else if (mbr1.getMin(dim) > mbr2.getMax(dim)) { m1 = mbr1.getMin(dim); m2 = mbr2.getMax(dim); - } - else { // The mbrs intersect! + } else { // The mbrs intersect! m1 = 0; m2 = 0; } @@ -109,13 +106,8 @@ public class DimensionSelectingDistanceFunction extends AbstractPrimitiveDistanc } @Override - public DoubleDistance distance(NumberVector<?> o1, NumberVector<?> o2) { - return new DoubleDistance(doubleDistance(o1, o2)); - } - - @Override - public DoubleDistance minDist(SpatialComparable mbr1, SpatialComparable mbr2) { - return new DoubleDistance(doubleMinDist(mbr1, mbr2)); + public double doubleNorm(NumberVector<?> obj) { + return Math.abs(obj.doubleValue(dim)); } /** @@ -128,31 +120,45 @@ public class DimensionSelectingDistanceFunction extends AbstractPrimitiveDistanc } @Override - public VectorTypeInformation<? super NumberVector<?>> getInputTypeRestriction() { - return new VectorFieldTypeInformation<NumberVector<?>>(NumberVector.class, dim, Integer.MAX_VALUE); + @Deprecated + public BitSet getSelectedDimensions() { + BitSet bs = new BitSet(dim + 1); + bs.set(dim); + return bs; } @Override - public DoubleDistance getDistanceFactory() { - return DoubleDistance.FACTORY; + public void setSelectedDimensions(BitSet dimensions) { + dim = dimensions.nextSetBit(0); + if (dim == -1) { + throw new IllegalStateException("No dimension was set."); + } + if (dimensions.nextSetBit(dim + 1) > 0) { + throw new IllegalStateException("More than one dimension was set."); + } } @Override - public <T extends NumberVector<?>> SpatialPrimitiveDistanceQuery<T, DoubleDistance> instantiate(Relation<T> database) { - return new SpatialPrimitiveDistanceQuery<T, DoubleDistance>(database, this); + public VectorTypeInformation<? super NumberVector<?>> getInputTypeRestriction() { + return new VectorFieldTypeInformation<>(NumberVector.class, dim, Integer.MAX_VALUE); + } + + @Override + public DoubleDistance getDistanceFactory() { + return DoubleDistance.FACTORY; } @Override public boolean equals(Object obj) { - if(obj == null) { + if (obj == null) { return false; } - if(!this.getClass().equals(obj.getClass())) { + if (!this.getClass().equals(obj.getClass())) { return false; } return this.dim == ((DimensionSelectingDistanceFunction) obj).dim; } - + /** * Parameterization class. * @@ -168,7 +174,7 @@ public class DimensionSelectingDistanceFunction extends AbstractPrimitiveDistanc super.makeOptions(config); final IntParameter dimP = new IntParameter(DIM_ID); dimP.addConstraint(new GreaterEqualConstraint(0)); - if(config.grab(dimP)) { + if (config.grab(dimP)) { dim = dimP.getValue(); } } @@ -178,4 +184,4 @@ public class DimensionSelectingDistanceFunction extends AbstractPrimitiveDistanc return new DimensionSelectingDistanceFunction(dim); } } -}
\ No newline at end of file +} diff --git a/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/DimensionSelectingSubspaceDistanceFunction.java b/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/DimensionSelectingSubspaceDistanceFunction.java index acc24bf7..f60e2fdc 100644 --- a/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/DimensionSelectingSubspaceDistanceFunction.java +++ b/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/DimensionSelectingSubspaceDistanceFunction.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.distance.distancefunction.subspace; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2012 + Copyright (C) 2013 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -24,8 +24,8 @@ package de.lmu.ifi.dbs.elki.distance.distancefunction.subspace; */ import java.util.BitSet; -import de.lmu.ifi.dbs.elki.distance.distancevalue.Distance; import de.lmu.ifi.dbs.elki.distance.distancefunction.DistanceFunction; +import de.lmu.ifi.dbs.elki.distance.distancevalue.Distance; /** * Interface for dimension selecting subspace distance functions. diff --git a/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/HiSCDistanceFunction.java b/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/HiSCDistanceFunction.java index 0703ab2d..a339c389 100644 --- a/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/HiSCDistanceFunction.java +++ b/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/HiSCDistanceFunction.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.distance.distancefunction.subspace; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2012 + Copyright (C) 2013 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -66,7 +66,7 @@ public class HiSCDistanceFunction<V extends NumberVector<?>> extends AbstractPre // Generics (AFAICT) @SuppressWarnings("unchecked") HiSCPreferenceVectorIndex<T> indexinst = (HiSCPreferenceVectorIndex<T>) indexFactory.instantiate((Relation<V>) database); - return new Instance<T>(database, indexinst, getEpsilon(), this); + return new Instance<>(database, indexinst, getEpsilon(), this); } /** @@ -152,7 +152,7 @@ public class HiSCDistanceFunction<V extends NumberVector<?>> extends AbstractPre @Override protected HiSCDistanceFunction<V> makeInstance() { - return new HiSCDistanceFunction<V>(factory, epsilon); + return new HiSCDistanceFunction<>(factory, epsilon); } } }
\ No newline at end of file diff --git a/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/LocalSubspaceDistanceFunction.java b/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/LocalSubspaceDistanceFunction.java index ff38d3d9..efcf6a3c 100644 --- a/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/LocalSubspaceDistanceFunction.java +++ b/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/LocalSubspaceDistanceFunction.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.distance.distancefunction.subspace; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2012 + Copyright (C) 2013 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -68,7 +68,7 @@ public class LocalSubspaceDistanceFunction extends AbstractIndexBasedDistanceFun // We can't really avoid these warnings, due to a limitation in Java Generics (AFAICT) @SuppressWarnings("unchecked") FilteredLocalPCAIndex<V> indexinst = (FilteredLocalPCAIndex<V>) indexFactory.instantiate((Relation<NumberVector<?>>)database); - return new Instance<V>(database, indexinst, this); + return new Instance<>(database, indexinst, this); } /** diff --git a/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceEuclideanDistanceFunction.java b/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceEuclideanDistanceFunction.java index 48518afd..d24fc62e 100644 --- a/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceEuclideanDistanceFunction.java +++ b/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceEuclideanDistanceFunction.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.distance.distancefunction.subspace; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2012 + Copyright (C) 2013 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team diff --git a/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceLPNormDistanceFunction.java b/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceLPNormDistanceFunction.java index ccfc51d9..2fbdf876 100644 --- a/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceLPNormDistanceFunction.java +++ b/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceLPNormDistanceFunction.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.distance.distancefunction.subspace; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2012 + Copyright (C) 2013 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -32,8 +32,8 @@ import de.lmu.ifi.dbs.elki.data.type.VectorFieldTypeInformation; import de.lmu.ifi.dbs.elki.database.query.distance.SpatialPrimitiveDistanceQuery; import de.lmu.ifi.dbs.elki.database.relation.Relation; import de.lmu.ifi.dbs.elki.distance.distancefunction.DoubleNorm; -import de.lmu.ifi.dbs.elki.distance.distancefunction.LPNormDistanceFunction; import de.lmu.ifi.dbs.elki.distance.distancefunction.SpatialPrimitiveDoubleDistanceFunction; +import de.lmu.ifi.dbs.elki.distance.distancefunction.minkowski.LPNormDistanceFunction; import de.lmu.ifi.dbs.elki.distance.distancevalue.DoubleDistance; import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.GreaterConstraint; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization; @@ -171,7 +171,7 @@ public class SubspaceLPNormDistanceFunction extends AbstractDimensionsSelectingD @Override public <T extends NumberVector<?>> SpatialPrimitiveDistanceQuery<T, DoubleDistance> instantiate(Relation<T> database) { - return new SpatialPrimitiveDistanceQuery<T, DoubleDistance>(database, this); + return new SpatialPrimitiveDistanceQuery<>(database, this); } @Override diff --git a/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceManhattanDistanceFunction.java b/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceManhattanDistanceFunction.java index fb777d81..ccca76da 100644 --- a/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceManhattanDistanceFunction.java +++ b/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceManhattanDistanceFunction.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.distance.distancefunction.subspace; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2012 + Copyright (C) 2013 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team diff --git a/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/package-info.java b/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/package-info.java index 85035eec..2b5db4c5 100644 --- a/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/package-info.java +++ b/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/package-info.java @@ -5,7 +5,7 @@ This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures -Copyright (C) 2012 +Copyright (C) 2013 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team |