diff options
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/JeffreyDivergenceDistanceFunction.java')
-rw-r--r-- | src/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/JeffreyDivergenceDistanceFunction.java | 43 |
1 files changed, 23 insertions, 20 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/JeffreyDivergenceDistanceFunction.java b/src/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/JeffreyDivergenceDistanceFunction.java index 73b944cf..173d2f0b 100644 --- a/src/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/JeffreyDivergenceDistanceFunction.java +++ b/src/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/JeffreyDivergenceDistanceFunction.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.distance.distancefunction.probabilistic; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2011 + Copyright (C) 2014 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -25,12 +25,12 @@ package de.lmu.ifi.dbs.elki.distance.distancefunction.probabilistic; import de.lmu.ifi.dbs.elki.data.NumberVector; import de.lmu.ifi.dbs.elki.data.spatial.SpatialComparable; -import de.lmu.ifi.dbs.elki.distance.distancefunction.AbstractSpatialDoubleDistanceFunction; +import de.lmu.ifi.dbs.elki.distance.distancefunction.AbstractSpatialDistanceFunction; import de.lmu.ifi.dbs.elki.utilities.documentation.Reference; import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer; /** - * Provides the Jeffrey Divergence Distance for FeatureVectors. + * Jeffrey Divergence Distance for {@link NumberVector}s. * * Reference: * <p> @@ -41,15 +41,18 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer; * * @author Erich Schubert */ -@Reference(authors = "J. Puzicha, J.M. Buhmann, Y. Rubner, C. Tomasi", title = "Empirical evaluation of dissimilarity measures for color and texture", booktitle = "Proc. 7th IEEE International Conference on Computer Vision", url = "http://dx.doi.org/10.1109/ICCV.1999.790412") -public class JeffreyDivergenceDistanceFunction extends AbstractSpatialDoubleDistanceFunction { +@Reference(authors = "J. Puzicha, J.M. Buhmann, Y. Rubner, C. Tomasi", // +title = "Empirical evaluation of dissimilarity measures for color and texture", // +booktitle = "Proc. 7th IEEE International Conference on Computer Vision", // +url = "http://dx.doi.org/10.1109/ICCV.1999.790412") +public class JeffreyDivergenceDistanceFunction extends AbstractSpatialDistanceFunction { /** * Static instance. Use this! */ public static final JeffreyDivergenceDistanceFunction STATIC = new JeffreyDivergenceDistanceFunction(); /** - * Constructor for the Jeffrey divergence. + * Constructor for the Jeffrey divergence - use {@link #STATIC} instead. * * @deprecated Use static instance! */ @@ -59,22 +62,22 @@ public class JeffreyDivergenceDistanceFunction extends AbstractSpatialDoubleDist } @Override - public double doubleDistance(NumberVector<?> v1, NumberVector<?> v2) { + public double distance(NumberVector v1, NumberVector v2) { final int dim = dimensionality(v1, v2); double agg = 0.; - for (int d = 0; d < dim; d++) { + for(int d = 0; d < dim; d++) { final double xd = v1.doubleValue(d), yd = v2.doubleValue(d); - if (xd == yd) { + if(xd == yd) { continue; } final double md = .5 * (xd + yd); - if (!(md > 0. || md < 0.)) { + if(!(md > 0. || md < 0.)) { continue; } - if (xd > 0.) { + if(xd > 0.) { agg += xd * Math.log(xd / md); } - if (yd > 0.) { + if(yd > 0.) { agg += yd * Math.log(yd / md); } } @@ -82,20 +85,20 @@ public class JeffreyDivergenceDistanceFunction extends AbstractSpatialDoubleDist } @Override - public double doubleMinDist(SpatialComparable mbr1, SpatialComparable mbr2) { + public double minDist(SpatialComparable mbr1, SpatialComparable mbr2) { final int dim = dimensionality(mbr1, mbr2); double agg = 0; - for (int d = 0; d < dim; d++) { + for(int d = 0; d < dim; d++) { final double min1 = mbr1.getMin(d), max1 = mbr1.getMax(d); final double min2 = mbr2.getMin(d), max2 = mbr2.getMax(d); final double md = .5 * (max1 + max2); - if (!(md > 0. || md < 0.)) { + if(!(md > 0. || md < 0.)) { continue; } - if (min1 > 0.) { + if(min1 > 0.) { agg += min1 * Math.log(min1 / md); } - if (min2 > 0.) { + if(min2 > 0.) { agg += min2 * Math.log(min2 / md); } } @@ -109,13 +112,13 @@ public class JeffreyDivergenceDistanceFunction extends AbstractSpatialDoubleDist @Override public boolean equals(Object obj) { - if (obj == null) { + if(obj == null) { return false; } - if (obj == this) { + if(obj == this) { return true; } - if (this.getClass().equals(obj.getClass())) { + if(this.getClass().equals(obj.getClass())) { return true; } return super.equals(obj); |