public class DiagonalCachingKernel extends NestedKernel
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.
Constructor and Description |
---|
DiagonalCachingKernel()
Create a new CachingKernel.
|
DiagonalCachingKernel(SVMKernel k)
Creates a new DiagonalCachingKernel that nests k.
|
Modifier and Type | Method and Description |
---|---|
double |
evaluate(Object x,
Object y)
Returns the kernel product of two Objects.
|
void |
setNestedKernel(SVMKernel k)
Set the kernel to nest.
|
String |
toString() |
getNestedKernel
public DiagonalCachingKernel()
public DiagonalCachingKernel(SVMKernel k)
public void setNestedKernel(SVMKernel k)
Set the kernel to nest.
This will flush the cache.
setNestedKernel
in class NestedKernel
k
- the kernel to nest.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.
Copyright © 2014 BioJava. All rights reserved.