public void TransformTest()
{
// Using a linear kernel should be equivalent to standard PCA
IKernel kernel = new Linear();
// Create analysis
var target = new KernelPrincipalComponentAnalysis(data, kernel, AnalysisMethod.Center);
// Compute
target.Compute();
double[,] actual = target.Transform(data, 2);
// first inversed.. ?
double[,] expected = new double[,]
{
{ -0.827970186, 0.175115307 },
{ 1.77758033, -0.142857227 },
{ -0.992197494, -0.384374989 },
{ -0.274210416, -0.130417207 },
{ -1.67580142, 0.209498461 },
{ -0.912949103, -0.175282444 },
{ 0.099109437, 0.349824698 },
{ 1.14457216, -0.046417258 },
{ 0.438046137, -0.017764629 },
{ 1.22382056, 0.162675287 },
};
// Verify both are equal with 0.001 tolerance value
Assert.IsTrue(Matrix.IsEqual(actual, expected, 0.0001));
// Assert the result equals the transformation of the input
double[,] result = target.Result;
double[,] projection = target.Transform(data);
Assert.IsTrue(Matrix.IsEqual(result, projection, 0.000001));
Assert.AreEqual(2, target.Eigenvalues.Length);
Assert.AreEqual(10, target.ComponentMatrix.GetLength(0));
Assert.AreEqual(2, target.ComponentMatrix.GetLength(1));
}