public void test_kernlab_new_method()
{
// Tested against R's kernlab
// test <- c(16, 117, 94, 132, 13, 73, 68, 129, 91, 50, 56, 12, 145, 105, 35, 53, 38, 51, 85, 116)
int[] test = { 15, 116, 93, 131, 12, 72, 67, 128, 90, 49, 55, 11, 144, 104, 34, 52, 37, 50, 84, 115 };
// data(iris)
double[,] iris = create_iris();
// kpc <- kpca(~.,data=iris[-test,-5],kernel="rbfdot",kpar=list(sigma=0.2),features=2)
var data = iris.Remove(test, new[] { 4 });
var kernel = new Gaussian() { Gamma = 1 };
var kpc = new KernelPrincipalComponentAnalysis(kernel);
kpc.NumberOfOutputs = 2;
var transform = kpc.Learn(data);
var rotated = kpc.Result;
var pcv = kpc.ComponentMatrix;
var eig = kpc.Eigenvalues;
double[] expected_eig = { 28.542404060412132, 15.235596653653861 };
double[,] expected_pcv = expected_r();
Assert.IsTrue(Matrix.IsEqual(expected_eig, eig, 1e-10));
Assert.IsTrue(Matrix.IsEqual(expected_pcv, pcv, 1e-10));
double[,] irisSubset = iris_sub();
var testing = iris.Submatrix(test, new[] { 0, 1, 2, 3 });
Assert.IsTrue(Matrix.IsEqual(irisSubset, testing));
double[,] expectedProjection = expected_p();
double[,] proj = kpc.Transform(testing);
Assert.IsTrue(expectedProjection.IsEqual(proj, 1e-6));
double[][] proj2 = kpc.Transform(testing.ToJagged());
Assert.IsTrue(expectedProjection.IsEqual(proj, 1e-6));
double[][] proj3 = transform.Transform(testing.ToJagged());
Assert.IsTrue(expectedProjection.IsEqual(proj, 1e-6));
}