Class DiagonalCachingKernel

java.lang.Object
org.biojava.stats.svm.NestedKernel
org.biojava.stats.svm.DiagonalCachingKernel
All Implemented Interfaces:
Serializable, SVMKernel

public class DiagonalCachingKernel extends NestedKernel
Caches the leading diagonal of a kernel matrix.

Several kernels need to repeatedly access k(x,x) to do things like normalization, or to calculate distances. This kernel wraps k so that these leading diagonal elements do not need to be calculated each time.

This kernel is thread-safe. However, care must be taken when setting the nested kernel that no other thread is retrieving values at the same time. This would cause a race condition in which the newly flushed cache may contain a value from the previous kernel.

Author:
Matthew Pocock, Thomas Down
See Also:
  • Constructor Details

  • Method Details

    • setNestedKernel

      public void setNestedKernel(SVMKernel k)

      Set the kernel to nest.

      This will flush the cache.

      Overrides:
      setNestedKernel in class NestedKernel
      Parameters:
      k - the kernel to nest.
    • evaluate

      public double evaluate(Object x, Object y)

      Returns the kernel product of two Objects.

      This returns getNestedKernel.evaluate(x, y). If x.equals(y) then it will cache the result first time, and do a hash table look up to retrieve the value in subsequent calls.

    • toString

      public String toString()
      Overrides:
      toString in class Object