diff options
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel')
8 files changed, 56 insertions, 65 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/KernelMatrix.java b/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/KernelMatrix.java index 39fb97a5..7acd784b 100644 --- a/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/KernelMatrix.java +++ b/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/KernelMatrix.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.distance.similarityfunction.kernel; 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 @@ -34,14 +34,12 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil; import de.lmu.ifi.dbs.elki.database.ids.DBIDs; import de.lmu.ifi.dbs.elki.database.query.similarity.SimilarityQuery; import de.lmu.ifi.dbs.elki.database.relation.Relation; -import de.lmu.ifi.dbs.elki.distance.distancevalue.NumberDistance; import de.lmu.ifi.dbs.elki.distance.similarityfunction.PrimitiveSimilarityFunction; import de.lmu.ifi.dbs.elki.logging.LoggingUtil; import de.lmu.ifi.dbs.elki.math.linearalgebra.Matrix; /** - * Provides a class for storing the kernel matrix and several extraction methods - * for convenience. + * Kernel matrix representation. * * @author Simon Paradies * @@ -141,8 +139,7 @@ public class KernelMatrix { * @param relation the database that holds the objects * @param ids the IDs of those objects for which the kernel matrix is computed */ - public <O, D extends NumberDistance<?, ?>> KernelMatrix(PrimitiveSimilarityFunction<? super O, D> kernelFunction, final Relation<? extends O> relation, final DBIDs ids) { - LoggingUtil.logExpensive(Level.FINER, "Computing kernel matrix"); + public <O> KernelMatrix(PrimitiveSimilarityFunction<? super O> kernelFunction, final Relation<? extends O> relation, final DBIDs ids) { this.kernel = new Matrix(ids.size(), ids.size()); if(ids instanceof DBIDRange) { this.idmap = new RangeMap((DBIDRange) ids); @@ -155,7 +152,7 @@ public class KernelMatrix { for(i1.seek(0); i1.valid(); i1.advance()) { O o1 = relation.get(i1); for(i2.seek(i1.getOffset()); i2.valid(); i2.advance()) { - double value = kernelFunction.similarity(o1, relation.get(i2)).doubleValue(); + double value = kernelFunction.similarity(o1, relation.get(i2)); kernel.set(i1.getOffset(), i2.getOffset(), value); kernel.set(i2.getOffset(), i1.getOffset(), value); } @@ -169,7 +166,7 @@ public class KernelMatrix { * @param relation the database that holds the objects * @param ids the IDs of those objects for which the kernel matrix is computed */ - public <O, D extends NumberDistance<?, ?>> KernelMatrix(SimilarityQuery<? super O, D> kernelFunction, final Relation<? extends O> relation, final DBIDs ids) { + public <O> KernelMatrix(SimilarityQuery<? super O> kernelFunction, final Relation<? extends O> relation, final DBIDs ids) { LoggingUtil.logExpensive(Level.FINER, "Computing kernel matrix"); kernel = new Matrix(ids.size(), ids.size()); if(ids instanceof DBIDRange) { @@ -182,7 +179,7 @@ public class KernelMatrix { for(i1.seek(0); i1.valid(); i1.advance()) { O o1 = relation.get(i1); for(i2.seek(i1.getOffset()); i2.valid(); i2.advance()) { - double value = kernelFunction.similarity(o1, i2).doubleValue(); + double value = kernelFunction.similarity(o1, i2); kernel.set(i1.getOffset(), i2.getOffset(), value); kernel.set(i2.getOffset(), i1.getOffset(), value); } diff --git a/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/LaplaceKernelFunction.java b/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/LaplaceKernelFunction.java index 2a5f6028..a2297409 100644 --- a/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/LaplaceKernelFunction.java +++ b/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/LaplaceKernelFunction.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.distance.similarityfunction.kernel; 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 @@ -24,8 +24,8 @@ package de.lmu.ifi.dbs.elki.distance.similarityfunction.kernel; */ import de.lmu.ifi.dbs.elki.data.NumberVector; -import de.lmu.ifi.dbs.elki.distance.distancefunction.AbstractVectorDoubleDistanceFunction; -import de.lmu.ifi.dbs.elki.distance.similarityfunction.AbstractVectorDoubleSimilarityFunction; +import de.lmu.ifi.dbs.elki.distance.distancefunction.AbstractNumberVectorDistanceFunction; +import de.lmu.ifi.dbs.elki.distance.similarityfunction.AbstractVectorSimilarityFunction; import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer; import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID; import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.CommonConstraints; @@ -33,11 +33,11 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter; /** - * Provides the laplace / exponential radial basis function kernel. + * Laplace / exponential radial basis function kernel. * * @author Erich Schubert */ -public class LaplaceKernelFunction extends AbstractVectorDoubleSimilarityFunction { +public class LaplaceKernelFunction extends AbstractVectorSimilarityFunction { /** * Scaling factor mgamma. (= - 1/sigma) */ @@ -54,8 +54,8 @@ public class LaplaceKernelFunction extends AbstractVectorDoubleSimilarityFunctio } @Override - public double doubleSimilarity(NumberVector<?> o1, NumberVector<?> o2) { - final int dim = AbstractVectorDoubleDistanceFunction.dimensionality(o1, o2); + public double similarity(NumberVector o1, NumberVector o2) { + final int dim = AbstractNumberVectorDistanceFunction.dimensionality(o1, o2); double sim = 0.; for(int i = 0; i < dim; i++) { final double v = o1.doubleValue(i) - o2.doubleValue(i); diff --git a/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/LinearKernelFunction.java b/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/LinearKernelFunction.java index a86ad55d..6a5b0a79 100644 --- a/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/LinearKernelFunction.java +++ b/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/LinearKernelFunction.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.distance.similarityfunction.kernel; 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 @@ -24,12 +24,12 @@ package de.lmu.ifi.dbs.elki.distance.similarityfunction.kernel; */ import de.lmu.ifi.dbs.elki.data.NumberVector; -import de.lmu.ifi.dbs.elki.distance.distancefunction.AbstractVectorDoubleDistanceFunction; +import de.lmu.ifi.dbs.elki.distance.distancefunction.AbstractNumberVectorDistanceFunction; import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer; /** - * Provides a linear Kernel function that computes a similarity between the two - * feature vectors V1 and V2 defined by V1^T*V2. + * Linear Kernel function that computes a similarity between the two feature + * vectors V1 and V2 defined by V1^T*V2. * * Note: this is effectively equivalent to using * {@link de.lmu.ifi.dbs.elki.distance.distancefunction.minkowski.EuclideanDistanceFunction} @@ -51,18 +51,18 @@ public class LinearKernelFunction extends PolynomialKernelFunction { } @Override - public double doubleSimilarity(final NumberVector<?> o1, final NumberVector<?> o2) { - final int dim = AbstractVectorDoubleDistanceFunction.dimensionality(o1, o2); + public double similarity(final NumberVector o1, final NumberVector o2) { + final int dim = AbstractNumberVectorDistanceFunction.dimensionality(o1, o2); double sim = 0.; - for (int i = 0; i < dim; i++) { + for(int i = 0; i < dim; i++) { sim += o1.doubleValue(i) * o2.doubleValue(i); } return sim; } @Override - public double doubleDistance(final NumberVector<?> fv1, final NumberVector<?> fv2) { - return Math.sqrt(doubleSimilarity(fv1, fv1) + doubleSimilarity(fv2, fv2) - 2 * doubleSimilarity(fv1, fv2)); + public double distance(final NumberVector fv1, final NumberVector fv2) { + return Math.sqrt(similarity(fv1, fv1) + similarity(fv2, fv2) - 2 * similarity(fv1, fv2)); } /** diff --git a/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/PolynomialKernelFunction.java b/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/PolynomialKernelFunction.java index 2b25ba19..a726003c 100644 --- a/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/PolynomialKernelFunction.java +++ b/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/PolynomialKernelFunction.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.distance.similarityfunction.kernel; 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 @@ -27,10 +27,9 @@ import de.lmu.ifi.dbs.elki.data.NumberVector; import de.lmu.ifi.dbs.elki.database.query.DistanceSimilarityQuery; import de.lmu.ifi.dbs.elki.database.query.distance.PrimitiveDistanceSimilarityQuery; import de.lmu.ifi.dbs.elki.database.relation.Relation; -import de.lmu.ifi.dbs.elki.distance.distancefunction.AbstractVectorDoubleDistanceFunction; -import de.lmu.ifi.dbs.elki.distance.distancefunction.PrimitiveDoubleDistanceFunction; -import de.lmu.ifi.dbs.elki.distance.distancevalue.DoubleDistance; -import de.lmu.ifi.dbs.elki.distance.similarityfunction.AbstractVectorDoubleSimilarityFunction; +import de.lmu.ifi.dbs.elki.distance.distancefunction.AbstractNumberVectorDistanceFunction; +import de.lmu.ifi.dbs.elki.distance.distancefunction.PrimitiveDistanceFunction; +import de.lmu.ifi.dbs.elki.distance.similarityfunction.AbstractVectorSimilarityFunction; import de.lmu.ifi.dbs.elki.math.MathUtil; import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer; import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID; @@ -40,12 +39,12 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter; /** - * Provides a polynomial Kernel function that computes a similarity between the - * two feature vectors V1 and V2 defined by (V1^T*V2)^degree. + * Polynomial Kernel function that computes a similarity between the two feature + * vectors V1 and V2 defined by (V1^T*V2)^degree. * * @author Simon Paradies */ -public class PolynomialKernelFunction extends AbstractVectorDoubleSimilarityFunction implements PrimitiveDoubleDistanceFunction<NumberVector<?>> { +public class PolynomialKernelFunction extends AbstractVectorSimilarityFunction implements PrimitiveDistanceFunction<NumberVector> { /** * The default degree. */ @@ -83,8 +82,8 @@ public class PolynomialKernelFunction extends AbstractVectorDoubleSimilarityFunc } @Override - public double doubleSimilarity(NumberVector<?> o1, NumberVector<?> o2) { - final int dim = AbstractVectorDoubleDistanceFunction.dimensionality(o1, o2); + public double similarity(NumberVector o1, NumberVector o2) { + final int dim = AbstractNumberVectorDistanceFunction.dimensionality(o1, o2); double sim = 0.; for(int i = 0; i < dim; i++) { sim += o1.doubleValue(i) * o2.doubleValue(i); @@ -93,22 +92,17 @@ public class PolynomialKernelFunction extends AbstractVectorDoubleSimilarityFunc } @Override - public DoubleDistance distance(final NumberVector<?> fv1, final NumberVector<?> fv2) { - return new DoubleDistance(doubleDistance(fv1, fv2)); - } - - @Override public boolean isMetric() { return true; } @Override - public double doubleDistance(NumberVector<?> fv1, NumberVector<?> fv2) { - return Math.sqrt(doubleSimilarity(fv1, fv1) + doubleSimilarity(fv2, fv2) - 2 * doubleSimilarity(fv1, fv2)); + public double distance(NumberVector fv1, NumberVector fv2) { + return Math.sqrt(similarity(fv1, fv1) + similarity(fv2, fv2) - 2 * similarity(fv1, fv2)); } @Override - public <T extends NumberVector<?>> DistanceSimilarityQuery<T, DoubleDistance> instantiate(Relation<T> database) { + public <T extends NumberVector> DistanceSimilarityQuery<T> instantiate(Relation<T> database) { return new PrimitiveDistanceSimilarityQuery<>(database, this, this); } diff --git a/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/RadialBasisFunctionKernelFunction.java b/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/RadialBasisFunctionKernelFunction.java index a7613a78..a0287b36 100644 --- a/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/RadialBasisFunctionKernelFunction.java +++ b/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/RadialBasisFunctionKernelFunction.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.distance.similarityfunction.kernel; 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 @@ -24,8 +24,8 @@ package de.lmu.ifi.dbs.elki.distance.similarityfunction.kernel; */ import de.lmu.ifi.dbs.elki.data.NumberVector; -import de.lmu.ifi.dbs.elki.distance.distancefunction.AbstractVectorDoubleDistanceFunction; -import de.lmu.ifi.dbs.elki.distance.similarityfunction.AbstractVectorDoubleSimilarityFunction; +import de.lmu.ifi.dbs.elki.distance.distancefunction.AbstractNumberVectorDistanceFunction; +import de.lmu.ifi.dbs.elki.distance.similarityfunction.AbstractVectorSimilarityFunction; import de.lmu.ifi.dbs.elki.utilities.Alias; import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer; import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID; @@ -34,12 +34,12 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter; /** - * Provides the Gaussian radial basis function kernel (RBF Kernel). + * Gaussian radial basis function kernel (RBF Kernel). * * @author Erich Schubert */ @Alias({ "rbf" }) -public class RadialBasisFunctionKernelFunction extends AbstractVectorDoubleSimilarityFunction { +public class RadialBasisFunctionKernelFunction extends AbstractVectorSimilarityFunction { /** * Scaling factor gamma. (= - 1/(2sigma^2)) */ @@ -56,8 +56,8 @@ public class RadialBasisFunctionKernelFunction extends AbstractVectorDoubleSimil } @Override - public double doubleSimilarity(NumberVector<?> o1, NumberVector<?> o2) { - final int dim = AbstractVectorDoubleDistanceFunction.dimensionality(o1, o2); + public double similarity(NumberVector o1, NumberVector o2) { + final int dim = AbstractNumberVectorDistanceFunction.dimensionality(o1, o2); double sim = 0.; for(int i = 0; i < dim; i++) { final double v = o1.doubleValue(i) - o2.doubleValue(i); diff --git a/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/RationalQuadraticKernelFunction.java b/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/RationalQuadraticKernelFunction.java index 0a3dc45c..54398fd3 100644 --- a/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/RationalQuadraticKernelFunction.java +++ b/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/RationalQuadraticKernelFunction.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.distance.similarityfunction.kernel; 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 @@ -24,8 +24,8 @@ package de.lmu.ifi.dbs.elki.distance.similarityfunction.kernel; */ import de.lmu.ifi.dbs.elki.data.NumberVector; -import de.lmu.ifi.dbs.elki.distance.distancefunction.AbstractVectorDoubleDistanceFunction; -import de.lmu.ifi.dbs.elki.distance.similarityfunction.AbstractVectorDoubleSimilarityFunction; +import de.lmu.ifi.dbs.elki.distance.distancefunction.AbstractNumberVectorDistanceFunction; +import de.lmu.ifi.dbs.elki.distance.similarityfunction.AbstractVectorSimilarityFunction; import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer; import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID; import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.CommonConstraints; @@ -33,12 +33,12 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter; /** - * Provides the rational quadratic kernel, a less computational approximation of - * the Gaussian RBF kerne ({@link RadialBasisFunctionKernelFunction}). + * Rational quadratic kernel, a less computational approximation of the Gaussian + * RBF kernel ({@link RadialBasisFunctionKernelFunction}). * * @author Erich Schubert */ -public class RationalQuadraticKernelFunction extends AbstractVectorDoubleSimilarityFunction { +public class RationalQuadraticKernelFunction extends AbstractVectorSimilarityFunction { /** * Constant term c. */ @@ -55,8 +55,8 @@ public class RationalQuadraticKernelFunction extends AbstractVectorDoubleSimilar } @Override - public double doubleSimilarity(NumberVector<?> o1, NumberVector<?> o2) { - final int dim = AbstractVectorDoubleDistanceFunction.dimensionality(o1, o2); + public double similarity(NumberVector o1, NumberVector o2) { + final int dim = AbstractNumberVectorDistanceFunction.dimensionality(o1, o2); double sim = 0.; for(int i = 0; i < dim; i++) { final double v = o1.doubleValue(i) - o2.doubleValue(i); diff --git a/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/SigmoidKernelFunction.java b/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/SigmoidKernelFunction.java index a88225f9..11f33f16 100644 --- a/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/SigmoidKernelFunction.java +++ b/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/SigmoidKernelFunction.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.distance.similarityfunction.kernel; 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 @@ -24,8 +24,8 @@ package de.lmu.ifi.dbs.elki.distance.similarityfunction.kernel; */ import de.lmu.ifi.dbs.elki.data.NumberVector; -import de.lmu.ifi.dbs.elki.distance.distancefunction.AbstractVectorDoubleDistanceFunction; -import de.lmu.ifi.dbs.elki.distance.similarityfunction.AbstractVectorDoubleSimilarityFunction; +import de.lmu.ifi.dbs.elki.distance.distancefunction.AbstractNumberVectorDistanceFunction; +import de.lmu.ifi.dbs.elki.distance.similarityfunction.AbstractVectorSimilarityFunction; import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer; import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization; @@ -37,7 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter; * * @author Erich Schubert */ -public class SigmoidKernelFunction extends AbstractVectorDoubleSimilarityFunction { +public class SigmoidKernelFunction extends AbstractVectorSimilarityFunction { /** * Scaling factor c, bias theta */ @@ -56,8 +56,8 @@ public class SigmoidKernelFunction extends AbstractVectorDoubleSimilarityFunctio } @Override - public double doubleSimilarity(NumberVector<?> o1, NumberVector<?> o2) { - final int dim = AbstractVectorDoubleDistanceFunction.dimensionality(o1, o2); + public double similarity(NumberVector o1, NumberVector o2) { + final int dim = AbstractNumberVectorDistanceFunction.dimensionality(o1, o2); double sim = 0.; for (int i = 0; i < dim; i++) { final double v = o1.doubleValue(i) * o2.doubleValue(i); diff --git a/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/package-info.java b/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/package-info.java index ec847f80..6d0d3da2 100644 --- a/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/package-info.java +++ b/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/package-info.java @@ -7,7 +7,7 @@ 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 |