Accord.Tests.Statistics.KernelDiscriminantAnalysisTest.scholkopf C# (CSharp) Method

scholkopf() public static method

public static scholkopf ( ) : ].double[
return ].double[
        public static double[,] scholkopf()
        {
            double[,] inputs =
            {
               #region Scholkopf KPCA Toy Example
                { -0.383504649, -0.162495898 },  { -0.437316092, -0.087483818 },
                { -0.492491985, -0.127135841 },  { -0.46483931,  -0.437745429 },
                { -0.569651254, -0.227378242 },  { -0.330385752, -0.232293992 },
                { -0.494094022, -0.168201208 },  { -0.320292822, -0.251117221 },
                { -0.473593147, -0.200204135 },  { -0.412832671, -0.039348904 },
                { -0.644617154, -0.115235137 },  { -0.570116535, -0.173189919 },
                { -0.375401788, -0.292348909 },  { -0.5638977,   -0.207049939 },
                { -0.442264978, -0.185210865 },  { -0.536002963, -0.255709364 },
                { -0.513557629, -0.23367057  },  { -0.634933848, -0.158477254 },
                { -0.62704499,  -0.044218646 },  { -0.401542973, -0.44442989  },
                { -0.504488061, -0.309819539 },  { -0.579894452, -0.087735214 },
                { -0.576517243, -0.141833274 },  { -0.41382651,  -0.22713543  },
                { -0.505622512, -0.158580869 },  { -0.448652183, -0.297781423 },
                { -0.460331913, -0.302146617 },  { -0.424378103, -0.168231202 },
                { -0.459951398, -0.04838922  },  { -0.634138072, -0.125056755 },
                { -0.050770039,  0.603988485 },  {  0.088529945,  0.351715749 },
                { -0.024809355,  0.715865471 },  { -0.0726249,	  0.497372053 },
                { -0.04450403,   0.715348699 },  { -0.061291112,  0.521354339 },
                { -0.020914408,	 0.663480859 },  {  0.056214783,  0.682040976 },
                { -0.106392289,  0.582397349 },  {  0.035158895,  0.656247387 },
                {  0.113299993,  0.587255712 },  {  0.014999425,  0.655417156 },
                {  0.070314405,  0.490265568 },  { -0.005241158,  0.52686986  },
                {  0.201849612,  0.740473192 },  {  0.09241594,	  0.537978579 },
                { -0.18141147,   0.623714877 },  {  0.003497332,  0.441315301 },
                { -0.180786206,  0.559851519 },  {  0.102819255,  0.522930773 },
                {  0.039460031,  0.573731949 },  {  0.063940564,  0.697648954 },
                {  0.087421289,  0.697781504 },  {  0.175240173,  0.717002111 },
                { -0.032005083,  0.615931086 },  { -0.013741381,  0.649952085 },
                {  0.061576963,  0.494462493 },  {  0.097789407,  0.55492568  },
                { -0.111534771,  0.727037824 },  { -0.055002145,  0.68986936  },
                {  0.54387051,   0.05261625  },  {  0.375265568, -0.018445412 },
                {  0.532466692,  0.019878283 },  {  0.539007041,  0.159042684 },
                {  0.459486168,  0.003219164 },  {  0.529231488,  0.088916367 },
                {  0.756591024, -0.129915249 },  {  0.454218436,  0.11825731  },
                {  0.338917299,  0.181747171 },  {  0.233047622, -0.058430213 },
                {  0.424030335, -0.101067382 },  {  0.432527914, -0.096049831 },
                {  0.382831281,  0.069115958 },  {  0.703293002, -0.075861821 },
                {  0.596848105, -0.009697173 },  {  0.5670292,	 -0.140694905 },
                {  0.542014604,  0.103081246 },  {  0.212724873, -0.07598744  },
                {  0.668587408,  0.087412723 },  {  0.502792455,  0.0761127   },
                {  0.409796942, -0.016592345 },  {  0.294674251,  0.030090744 },
                {  0.50890863,  -0.032246733 },  {  0.708709913, -0.036841128 },
                {  0.536511846,  0.114789528 },  {  0.584610553,  0.004143026 },
                {  0.481546234, -0.109804965 },  {  0.603071442,  0.156672375 },
                {  0.347237735, -0.104842345 },  {  0.596493896,  0.042272368 },
#endregion
            };
            return inputs;
        }

Usage Example

        public void ComputeTest3()
        {
            // Schölkopf KPCA toy example
            double[][] inputs = KernelDiscriminantAnalysisTest.scholkopf().ToJagged();

            int[] output = Matrix.Expand(new int[, ] {
                { 1 }, { 2 }, { 3 }
            }, new int[] { 30, 30, 30 }).GetColumn(0);

            var target = new LinearDiscriminantAnalysis(inputs, output);

            target.Compute();


            double[][] actualOutput = target.Transform(inputs, 2);

            double[][] expectedOutput = new double[][]
            {
                new double[] { -0.538139989229878, -0.121488441426448 },
                new double[] { -0.520567977909383, -0.236347775257103 },
                new double[] { -0.613477771536265, -0.237553378277353 },
                new double[] { -0.881409292261883, 0.0935329540430248 },
                new double[] { -0.786030327227691, -0.194447244320605 },
                new double[] { -0.551442781305912, -0.0123559223681317 },
                new double[] { -0.654158684224005, -0.197674316111905 },
                new double[] { -0.559262527603992, 0.013941098843778 },
                new double[] { -0.66411263033584, -0.150490536781379 },
                new double[] { -0.450278115670319, -0.26635277047329 },
                new double[] { -0.754277919814726, -0.362102431498804 },
                new double[] { -0.734928584895253, -0.248980106866025 },
                new double[] { -0.653608644698921, 0.0143647201181394 },
                new double[] { -0.760931829205159, -0.210515053383166 },
                new double[] { -0.618516474044195, -0.142285367330635 },
                new double[] { -0.779342671809792, -0.141199637690287 },
                new double[] { -0.735924645881001, -0.146617711795974 },
                new double[] { -0.785744941649802, -0.31168984794763 },
                new double[] { -0.669124608334209, -0.420106774148463 },
                new double[] { -0.824474062918818, 0.147088211780247 },
                new double[] { -0.799320425464541, -0.0637527478684568 },
                new double[] { -0.663385572908364, -0.341675337652223 },
                new double[] { -0.711489490612721, -0.285076461900782 },
                new double[] { -0.629974516987287, -0.0793021800418604 },
                new double[] { -0.65653220838978, -0.215831476310217 },
                new double[] { -0.732028761895192, -0.0344445204239324 },
                new double[] { -0.747862524505661, -0.0387281405057906 },
                new double[] { -0.584471308297719, -0.146019839184912 },
                new double[] { -0.505999843470041, -0.292203766994798 },
                new double[] { -0.753145346001892, -0.344521076589941 },
                new double[] { 0.524001176904191, -0.64158358593467 },
                new double[] { 0.423231837049123, -0.286159521674357 },
                new double[] { 0.656426922526874, -0.734236743185728 },
                new double[] { 0.400687334850924, -0.55115062988607 },
                new double[] { 0.636240473795815, -0.748303834209756 },
                new double[] { 0.434843292522556, -0.566740271085617 },
                new double[] { 0.6104713046872, -0.678967931597066 },
                new double[] { 0.705262787734728, -0.640414054245901 },
                new double[] { 0.447832238019099, -0.661180602320438 },
                new double[] { 0.659661046824861, -0.630212303468225 },
                new double[] { 0.672147865129419, -0.503357319234685 },
                new double[] { 0.638711507323203, -0.644310115155753 },
                new double[] { 0.536863923134139, -0.438197907521421 },
                new double[] { 0.496141960347812, -0.530750925839334 },
                new double[] { 0.906503239478175, -0.59100400335581 },
                new double[] { 0.604370405460113, -0.46954478102178 },
                new double[] { 0.412131895699799, -0.758049666960606 },
                new double[] { 0.423464497686766, -0.438725534434289 },
                new double[] { 0.351983120391112, -0.693723302359591 },
                new double[] { 0.600453835286623, -0.446793343407863 },
                new double[] { 0.585438337076168, -0.544511883828685 },
                new double[] { 0.727841528212698, -0.650301108602448 },
                new double[] { 0.751448391254333, -0.633046233976002 },
                new double[] { 0.857558106835016, -0.587237152739008 },
                new double[] { 0.554131023905099, -0.639630778761857 },
                new double[] { 0.604769997035484, -0.660127547060936 },
                new double[] { 0.532120384569746, -0.448864888884797 },
                new double[] { 0.62587117635701, -0.482512841662285 },
                new double[] { 0.580333409415421, -0.80962907380129 },
                new double[] { 0.601495554392805, -0.730598326012776 },
                new double[] { 0.593941507609862, 0.350118652741363 },
                new double[] { 0.357712432226073, 0.2963287302749 },
                new double[] { 0.551383385237947, 0.374412117881701 },
                new double[] { 0.690356212604399, 0.240090830766309 },
                new double[] { 0.462549608533101, 0.337029321214765 },
                new double[] { 0.613846624949793, 0.302978372516851 },
                new double[] { 0.632960280224768, 0.690169219132759 },
                new double[] { 0.56675518056767, 0.218090431387548 },
                new double[] { 0.511872653377024, 0.0692203349420495 },
                new double[] { 0.177443905363662, 0.23100145864499 },
                new double[] { 0.327851974844022, 0.415060901754569 },
                new double[] { 0.341124386412447, 0.416335789100053 },
                new double[] { 0.44860383164398, 0.214369753920447 },
                new double[] { 0.63110091195233, 0.59664872441043 },
                new double[] { 0.587620021924801, 0.451661866983025 },
                new double[] { 0.433140254056975, 0.56057876616672 },
                new double[] { 0.640109409731833, 0.298279362477078 },
                new double[] { 0.140413240631302, 0.233509735221199 },
                new double[] { 0.751771638050688, 0.407674765260726 },
                new double[] { 0.57522328805595, 0.296203994397562 },
                new double[] { 0.394007233177402, 0.32004606890218 },
                new double[] { 0.323309388831049, 0.188114883322704 },
                new double[] { 0.478221796731402, 0.409092441378802 },
                new double[] { 0.673650933463591, 0.561639241955278 },
                new double[] { 0.645748558652938, 0.282496300419708 },
                new double[] { 0.588553164739597, 0.428759787951118 },
                new double[] { 0.377052961673182, 0.466388880012159 },
                new double[] { 0.752164965657736, 0.289900686186869 },
                new double[] { 0.247467021467445, 0.361971115290112 },
                new double[] { 0.636721385361009, 0.399430035006511 }
            };

            Assert.IsTrue(Matrix.IsEqual(actualOutput, expectedOutput, 1e-5));

            // Assert the result equals the transformation of the input
            double[][] result     = target.Result.ToJagged();
            double[][] projection = target.Transform(inputs);
            Assert.IsTrue(Matrix.IsEqual(result, projection));
            Assert.IsTrue(Matrix.IsEqual(result, expectedOutput, 1e-6));


            int[] actual2 = target.Classify(inputs);
            Assert.IsTrue(Matrix.IsEqual(actual2, output));

            double[][] scores  = new double[inputs.Length][];
            int[]      actual3 = new int[inputs.Length];
            for (int i = 0; i < inputs.Length; i++)
            {
                actual3[i] = target.Classify(inputs[i], out scores[i]);
            }

            Assert.IsTrue(Matrix.IsEqual(actual3, output));
            var actualMeans = target.projectedMeans;

            scores = scores.Get(0, 5, null);
            //var str2 = scores.ToCSharp();

            var expected = new double[][] {
                new double[] { -0.0213345342185279, -1.48626837046456, -1.31720201011333 },
                new double[] { -0.0295574706116435, -1.35158673700292, -1.40393954892816 },
                new double[] { -0.0092314990039484, -1.5648696800027, -1.60459093003653 },
                new double[] { -0.108880936496527, -2.6251849668169, -1.99175104959092 },
                new double[] { -0.0126381832555252, -2.04103325730257, -1.97099575187989 }
            };

            Assert.IsTrue(Matrix.IsEqual(scores, expected, 1e-6));
        }