package func.svm;
import shared.Instance;
import util.linalg.Vector;
/**
* A radial basis function kernel
* @author Andrew Guillory gtg008g@mail.gatech.edu
* @version 1.0
*/
public class RBFKernel extends Kernel {
/**
* The sigma parameter
*/
private double sigma;
/**
* The gamma value
*/
private double gamma;
/**
* Make a new radial basis function kernel
* @param sigma the sigma value
*/
public RBFKernel(double sigma) {
this.sigma = sigma;
gamma = -1/(2 * sigma * sigma);
}
/**
* @see svm.Kernel#value(svm.SupportVectorMachineData, svm.SupportVectorMachineData)
*/
public double value(Instance a, Instance b) {
Vector va = a.getData();
Vector vb = b.getData();
double difference = va.dotProduct(va)
+ vb.dotProduct(vb)
- 2*va.dotProduct(vb);
return Math.exp(gamma * difference);
}
/**
* @see java.lang.Object#toString()
*/
public String toString() {
return "RBF Kernel sigma = " + sigma;
}
}