gov.sandia.cognition.learning.function.kernel.SigmoidKernel Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of cognitive-foundry Show documentation
Show all versions of cognitive-foundry Show documentation
A single jar with all the Cognitive Foundry components.
/*
* File: SigmoidKernel.java
* Authors: Justin Basilico
* Company: Sandia National Laboratories
* Project: Cognitive Foundry
*
* Copyright July 19, 2007, Sandia Corporation. Under the terms of Contract
* DE-AC04-94AL85000, there is a non-exclusive license for use of this work by
* or on behalf of the U.S. Government. Export of this program may require a
* license from the United States Government. See CopyrightHistory.txt for
* complete details.
*
*/
package gov.sandia.cognition.learning.function.kernel;
import gov.sandia.cognition.annotation.CodeReview;
import gov.sandia.cognition.math.matrix.Vectorizable;
import gov.sandia.cognition.util.AbstractCloneableSerializable;
/**
* The SigmoidKernel
class implements a sigmoid kernel based on the
* hyperbolic tangent. The kernel it computes is:
*
* tanh(kappa * (x dot y) + c)
*
* @author Justin Basilico
* @since 2.0
*/
@CodeReview(
reviewer="Kevin R. Dixon",
date="2009-07-08",
changesNeeded=false,
comments={
"Made clone call super.clone.",
"Looks fine otherwise."
}
)
public class SigmoidKernel
extends AbstractCloneableSerializable
implements Kernel
{
/** The default value for kappa is {@value}. */
public static final double DEFAULT_KAPPA = 1.0;
/** The default value for the constant is {@value}. */
public static final double DEFAULT_CONSTANT = 0.0;
/** The kappa value to multiply times the dot product. */
protected double kappa;
/** The constant used in the sigmoid. */
protected double constant;
/**
* Creates a new instance of SigmoidKernel with default values of 1.0 for
* kappa and 0.0 for the constant.
*/
public SigmoidKernel()
{
this(DEFAULT_KAPPA, DEFAULT_CONSTANT);
}
/**
* Creates a new instance of SigmoidKernel from its two needed parameters:
* kappa and a constant. The kernel it evaluates is:
*
* tanh(kappa * (x dot y) + c)
*
* @param kappa The value multiplied by the dot product of the two vectors
* before it is passed to the hyperbolic tangent function.
* @param constant The constant inside of the sigmoid kernel.
*/
public SigmoidKernel(
final double kappa,
final double constant)
{
super();
this.setKappa(kappa);
this.setConstant(constant);
}
/**
* Creates a new copy of a SigmoidKernel.
*
* @param other The SigmoidKernel to copy.
*/
public SigmoidKernel(
final SigmoidKernel other)
{
this(other.getKappa(), other.getConstant());
}
@Override
public SigmoidKernel clone()
{
return (SigmoidKernel) super.clone();
}
/**
* Evaluates the sigmoid kernel between the two given vectors, which is:
*
* tanh(kappa * (x dot y) + c)
*
* @param x The first vector.
* @param y The second vector.
* @return The result of the sigmoid kernel: tanh(kappa * (x dot y) + c)
*/
public double evaluate(
final Vectorizable x,
final Vectorizable y)
{
final double product =
x.convertToVector().dotProduct(y.convertToVector());
return Math.tanh(this.kappa * product + this.constant);
}
/**
* Gets kappa, the value multiplied by the dot product of the two vectors
* before it is passed to the hyperbolic tangent function.
*
* @return The kappa value for the sigmoid kernel.
*/
public double getKappa()
{
return this.kappa;
}
/**
* Sets kappa, the value multiplied by the dot product of the two vectors
* before it is passed to the hyperbolic tangent function.
*
* @param kappa The kappa value for the sigmoid kernel.
*/
public void setKappa(
final double kappa)
{
this.kappa = kappa;
}
/**
* Gets the constant inside of the sigmoid kernel.
*
* @return The constant term used for the sigmoid kernel.
*/
public double getConstant()
{
return this.constant;
}
/**
* Sets the constant inside of the sigmoid kernel.
*
* @param constant The constant term used for the sigmoid kernel.
*/
public void setConstant(
final double constant)
{
this.constant = constant;
}
}