package JKernelMachines; import JKernelMachines.Kernel; /** * Generalized linear kernel on double[]. Provided a proper inner product matrix M, this kernel returns :
* k(x, y) = x'*M*y * @author dpicard * */ public class GeneralizedDoubleLinear extends Kernel { /** * */ private static final long serialVersionUID = 6618610116348247480L; double[][] M; int size; public GeneralizedDoubleLinear(double[][] innerProduct) { if(innerProduct.length != innerProduct[0].length) { M = null; size = 0; } else { M = innerProduct; size = M.length; } } @Override public double valueOf(double[] t1, double[] t2) { if(t1.length != size && t2.length != size) return 0; double sum = 0; for(int i = 0 ; i < M.length; i++) { double xtM = 0; for(int j = 0 ; j < M[0].length; j++) { xtM += t1[j]*M[j][i]; } sum += xtM*t2[i]; } return sum; } @Override public double valueOf(double[] t1) { return valueOf(t1, t1); } }