diff options
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel')
4 files changed, 24 insertions, 21 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/FooKernelFunction.java b/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/FooKernelFunction.java index 093cf652..be9ba959 100644 --- a/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/FooKernelFunction.java +++ b/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/FooKernelFunction.java @@ -43,7 +43,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter; * * @author Simon Paradies */ -public class FooKernelFunction extends AbstractPrimitiveDistanceFunction<NumberVector<?, ?>, DoubleDistance> implements PrimitiveSimilarityFunction<NumberVector<?, ?>, DoubleDistance> { +public class FooKernelFunction extends AbstractPrimitiveDistanceFunction<NumberVector<?>, DoubleDistance> implements PrimitiveSimilarityFunction<NumberVector<?>, DoubleDistance> { /** * The default max_degree. */ @@ -52,7 +52,7 @@ public class FooKernelFunction extends AbstractPrimitiveDistanceFunction<NumberV /** * Parameter for the maximum degree */ - public static final OptionID MAX_DEGREE_ID = OptionID.getOrCreateOptionID("fookernel.max_degree", "The max degree of the" + FooKernelFunction.class.getSimpleName() + ". Default: " + DEFAULT_MAX_DEGREE); + public static final OptionID MAX_DEGREE_ID = new OptionID("fookernel.max_degree", "The max degree of the" + FooKernelFunction.class.getSimpleName() + ". Default: " + DEFAULT_MAX_DEGREE); /** * Degree of the polynomial kernel function @@ -78,25 +78,25 @@ public class FooKernelFunction extends AbstractPrimitiveDistanceFunction<NumberV * an instance of {@link DoubleDistance DoubleDistance}. */ @Override - public DoubleDistance similarity(final NumberVector<?, ?> o1, final NumberVector<?, ?> o2) { + public DoubleDistance similarity(final NumberVector<?> o1, final NumberVector<?> o2) { if(o1.getDimensionality() != o2.getDimensionality()) { throw new IllegalArgumentException("Different dimensionality of FeatureVectors\n first argument: " + o1.toString() + "\n second argument: " + o2.toString()); } double sim = 0.0; // iterate over differently powered dimensions - for(int degree = 1; degree <= max_degree; degree++) { + for(int degree = 0; degree < max_degree; degree++) { sim += Math.pow(o1.doubleValue(degree) * o2.doubleValue(degree), degree); } return new DoubleDistance(sim); } @Override - public DoubleDistance distance(final NumberVector<?, ?> fv1, final NumberVector<?, ?> fv2) { + public DoubleDistance distance(final NumberVector<?> fv1, final NumberVector<?> fv2) { return new DoubleDistance(Math.sqrt(similarity(fv1, fv1).doubleValue() + similarity(fv2, fv2).doubleValue() - 2 * similarity(fv1, fv2).doubleValue())); } @Override - public VectorFieldTypeInformation<? super NumberVector<?, ?>> getInputTypeRestriction() { + public VectorFieldTypeInformation<? super NumberVector<?>> getInputTypeRestriction() { return TypeUtil.NUMBER_VECTOR_FIELD; } @@ -106,7 +106,7 @@ public class FooKernelFunction extends AbstractPrimitiveDistanceFunction<NumberV } @Override - public <T extends NumberVector<?, ?>> DistanceSimilarityQuery<T, DoubleDistance> instantiate(Relation<T> database) { + public <T extends NumberVector<?>> DistanceSimilarityQuery<T, DoubleDistance> instantiate(Relation<T> database) { return new PrimitiveDistanceSimilarityQuery<T, DoubleDistance>(database, this, this); } 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 a8b6d8fc..50dd0b4f 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 @@ -69,7 +69,7 @@ public class KernelMatrix { * @deprecated ID mapping is not reliable! */ @Deprecated - public <O extends FeatureVector<O, ?>> KernelMatrix(final PrimitiveSimilarityFunction<? super O, DoubleDistance> kernelFunction, final Relation<? extends O> database) { + public <O extends FeatureVector<?>> KernelMatrix(final PrimitiveSimilarityFunction<? super O, DoubleDistance> kernelFunction, final Relation<? extends O> database) { this(kernelFunction, database, DBIDUtil.ensureArray(database.getDBIDs())); } @@ -80,7 +80,7 @@ public class KernelMatrix { * @param database the database that holds the objects * @param ids the IDs of those objects for which the kernel matrix is computed */ - public <O extends FeatureVector<O, ?>> KernelMatrix(final PrimitiveSimilarityFunction<? super O, DoubleDistance> kernelFunction, final Relation<? extends O> database, final ArrayDBIDs ids) { + public <O extends FeatureVector<?>> KernelMatrix(final PrimitiveSimilarityFunction<? super O, DoubleDistance> kernelFunction, final Relation<? extends O> database, final ArrayDBIDs ids) { LoggingUtil.logExpensive(Level.FINER, "Computing kernel matrix"); kernel = new Matrix(ids.size(), ids.size()); double value; 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 6cde55a6..ffd2d0e3 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 @@ -40,7 +40,7 @@ import de.lmu.ifi.dbs.elki.distance.similarityfunction.AbstractPrimitiveSimilari * @author Simon Paradies * @param <O> vector type */ -public class LinearKernelFunction<O extends NumberVector<?, ?>> extends AbstractPrimitiveSimilarityFunction<O, DoubleDistance> implements PrimitiveDistanceFunction<O, DoubleDistance> { +public class LinearKernelFunction<O extends NumberVector<?>> extends AbstractPrimitiveSimilarityFunction<O, DoubleDistance> implements PrimitiveDistanceFunction<O, DoubleDistance> { /** * Provides a linear Kernel function that computes a similarity between the * two vectors V1 and V2 defined by V1^T*V2. @@ -51,7 +51,7 @@ public class LinearKernelFunction<O extends NumberVector<?, ?>> extends Abstract /** * Provides a linear Kernel function that computes a similarity between the - * two feature vectors V1 and V2 definded by V1^T*V2 + * two feature vectors V1 and V2 definded by V1^T*V2. * * @param o1 first feature vector * @param o2 second feature vector @@ -64,7 +64,7 @@ public class LinearKernelFunction<O extends NumberVector<?, ?>> extends Abstract throw new IllegalArgumentException("Different dimensionality of Feature-Vectors" + "\n first argument: " + o1.toString() + "\n second argument: " + o2.toString()); } double sim = 0; - for(int i = 1; i <= o1.getDimensionality(); i++) { + for(int i = 0; i < o1.getDimensionality(); i++) { sim += o1.doubleValue(i) * o2.doubleValue(i); } return new DoubleDistance(sim); 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 e32f5b45..1a7f97f5 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 @@ -43,19 +43,19 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter; * * @author Simon Paradies */ -public class PolynomialKernelFunction extends AbstractPrimitiveDistanceFunction<NumberVector<?, ?>, DoubleDistance> implements PrimitiveSimilarityFunction<NumberVector<?, ?>, DoubleDistance> { +public class PolynomialKernelFunction extends AbstractPrimitiveDistanceFunction<NumberVector<?>, DoubleDistance> implements PrimitiveSimilarityFunction<NumberVector<?>, DoubleDistance> { /** * The default degree. */ public static final double DEFAULT_DEGREE = 2.0; /** - * Degree parameter + * Degree parameter. */ - public static final OptionID DEGREE_ID = OptionID.getOrCreateOptionID("kernel.degree", "The degree of the polynomial kernel function. Default: " + DEFAULT_DEGREE); + public static final OptionID DEGREE_ID = new OptionID("kernel.degree", "The degree of the polynomial kernel function. Default: " + DEFAULT_DEGREE); /** - * Degree of the polynomial kernel function + * Degree of the polynomial kernel function. */ private double degree = 0.0; @@ -78,25 +78,25 @@ public class PolynomialKernelFunction extends AbstractPrimitiveDistanceFunction< * instance of {@link DoubleDistance DoubleDistance}. */ @Override - public DoubleDistance similarity(NumberVector<?, ?> o1, NumberVector<?, ?> o2) { + public DoubleDistance similarity(NumberVector<?> o1, NumberVector<?> o2) { if(o1.getDimensionality() != o2.getDimensionality()) { throw new IllegalArgumentException("Different dimensionality of Feature-Vectors" + "\n first argument: " + o1.toString() + "\n second argument: " + o2.toString()); } double sim = 0; - for(int i = 1; i <= o1.getDimensionality(); i++) { + for(int i = 0; i < o1.getDimensionality(); i++) { sim += o1.doubleValue(i) * o2.doubleValue(i); } return new DoubleDistance(Math.pow(sim, degree)); } @Override - public DoubleDistance distance(final NumberVector<?, ?> fv1, final NumberVector<?, ?> fv2) { + public DoubleDistance distance(final NumberVector<?> fv1, final NumberVector<?> fv2) { return new DoubleDistance(Math.sqrt(similarity(fv1, fv1).doubleValue() + similarity(fv2, fv2).doubleValue() - 2 * similarity(fv1, fv2).doubleValue())); } @Override - public VectorFieldTypeInformation<? super NumberVector<?, ?>> getInputTypeRestriction() { + public VectorFieldTypeInformation<? super NumberVector<?>> getInputTypeRestriction() { return TypeUtil.NUMBER_VECTOR_FIELD; } @@ -106,7 +106,7 @@ public class PolynomialKernelFunction extends AbstractPrimitiveDistanceFunction< } @Override - public <T extends NumberVector<?, ?>> DistanceSimilarityQuery<T, DoubleDistance> instantiate(Relation<T> database) { + public <T extends NumberVector<?>> DistanceSimilarityQuery<T, DoubleDistance> instantiate(Relation<T> database) { return new PrimitiveDistanceSimilarityQuery<T, DoubleDistance>(database, this, this); } @@ -118,6 +118,9 @@ public class PolynomialKernelFunction extends AbstractPrimitiveDistanceFunction< * @apiviz.exclude */ public static class Parameterizer extends AbstractParameterizer { + /** + * Degree of the polynomial kernel function. + */ protected double degree = 0; @Override |