summaryrefslogtreecommitdiff
path: root/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel')
-rw-r--r--src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/FooKernelFunction.java14
-rw-r--r--src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/KernelMatrix.java4
-rw-r--r--src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/LinearKernelFunction.java6
-rw-r--r--src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/PolynomialKernelFunction.java21
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