diff options
author | Andrej Shadura <andrewsh@debian.org> | 2019-03-09 22:30:41 +0000 |
---|---|---|
committer | Andrej Shadura <andrewsh@debian.org> | 2019-03-09 22:30:41 +0000 |
commit | 38212b3127e90751fb39cda34250bc11be62b76c (patch) | |
tree | dc1397346030e9695bd763dddc93b3be527cd643 /src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/PolynomialKernelFunction.java | |
parent | 337087b668d3a54f3afee3a9adb597a32e9f7e94 (diff) |
Import Upstream version 0.7.0
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/PolynomialKernelFunction.java')
-rw-r--r-- | src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/PolynomialKernelFunction.java | 160 |
1 files changed, 0 insertions, 160 deletions
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 deleted file mode 100644 index a726003c..00000000 --- a/src/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/PolynomialKernelFunction.java +++ /dev/null @@ -1,160 +0,0 @@ -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) 2014 - Ludwig-Maximilians-Universität München - Lehr- und Forschungseinheit für Datenbanksysteme - ELKI Development Team - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -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.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; -import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.CommonConstraints; -import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization; -import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter; -import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter; - -/** - * 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 AbstractVectorSimilarityFunction implements PrimitiveDistanceFunction<NumberVector> { - /** - * The default degree. - */ - public static final int DEFAULT_DEGREE = 2; - - /** - * Degree of the polynomial kernel function. - */ - private final int degree; - - /** - * Bias of the similarity function. - */ - private final double bias; - - /** - * Constructor. - * - * @param degree Kernel degree - * @param bias Bias offset - */ - public PolynomialKernelFunction(int degree, double bias) { - super(); - this.degree = degree; - this.bias = bias; - } - - /** - * Constructor. - * - * @param degree Kernel degree - */ - public PolynomialKernelFunction(int degree) { - this(degree, 0.); - } - - @Override - 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); - } - return MathUtil.powi(sim + bias, degree); - } - - @Override - public boolean isMetric() { - return true; - } - - @Override - 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> instantiate(Relation<T> database) { - return new PrimitiveDistanceSimilarityQuery<>(database, this, this); - } - - /** - * Parameterization class. - * - * @author Erich Schubert - * - * @apiviz.exclude - */ - public static class Parameterizer extends AbstractParameterizer { - /** - * Degree parameter. - */ - public static final OptionID DEGREE_ID = new OptionID("kernel.polynomial.degree", "The degree of the polynomial kernel function. Default: " + DEFAULT_DEGREE); - - /** - * Bias parameter. - */ - public static final OptionID BIAS_ID = new OptionID("kernel.polynomial.bias", "The bias of the polynomial kernel, a constant that is added to the scalar product."); - - /** - * Degree of the polynomial kernel function. - */ - protected int degree = 0; - - /** - * Bias parameter. - */ - protected double bias = 0.; - - @Override - protected void makeOptions(Parameterization config) { - super.makeOptions(config); - final IntParameter degreeP = new IntParameter(DEGREE_ID, DEFAULT_DEGREE); - degreeP.addConstraint(CommonConstraints.GREATER_EQUAL_ONE_INT); - if(config.grab(degreeP)) { - degree = degreeP.intValue(); - } - final DoubleParameter biasP = new DoubleParameter(BIAS_ID); - biasP.setOptional(true); - if(config.grab(biasP)) { - bias = biasP.doubleValue(); - } - } - - @Override - protected PolynomialKernelFunction makeInstance() { - if(degree == 1 && (bias == 0.)) { - return LinearKernelFunction.STATIC; - } - return new PolynomialKernelFunction(degree, bias); - } - } -} |