Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
08/10/12 20:42:30 (12 years ago)
Author:
gkronber
Message:

#1902 worked on GPR: added line chart, made parameters of mean and covariance functions readable, removed target variable scaling, moved noise hyperparameter for likelihood function to the end of the parameter list, added methods to calculate the predicted variance, removed limits for scale of covariance functions and introduced exception handling to catch non-spd or singular cov matrixes, implemented rational quadratic covariance function, added unit test case from GBML book (however it does not work as the book seemingly uses a noise-less likelihood function)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Tests/HeuristicLab.Algorithms.DataAnalysis-3.4/GaussianProcessFunctionsTest.cs

    r8463 r8473  
    254254    }
    255255
     256    [TestMethod]
     257    public void CovRQIsoTest() {
     258      TestCovarianceFunction(new CovarianceRQiso(), 0,
     259        new double[,]
     260          {
     261{    0.6452,    0.6190,    0.8662,    0.6338,    0.7802,    0.5893,    0.7102,    0.7753,    0.7037,    0.8331},
     262{    0.6771,    0.7392,    0.7442,    0.6630,    0.7603,    0.6144,    0.7145,    0.8346,    0.7492,    0.8200},
     263{    0.7963,    0.7777,    0.8574,    0.7266,    0.6362,    0.8060,    0.8519,    0.7084,    0.7810,    0.8459},
     264{    0.7988,    0.6268,    0.8004,    0.7500,    0.5583,    0.6524,    0.8968,    0.8864,    0.8739,    0.8382},
     265{    0.8902,    0.6571,    0.7919,    0.9030,    0.5304,    0.5727,    0.8079,    0.9232,    0.9117,    0.8733},
     266{    0.8819,    0.7639,    0.7387,    0.8449,    0.5785,    0.6563,    0.8783,    0.9519,    0.9535,    0.8742},
     267{    0.6716,    0.7814,    0.7590,    0.6437,    0.8797,    0.6366,    0.7012,    0.6810,    0.7090,    0.8339},
     268{    0.6702,    0.6823,    0.8268,    0.6250,    0.7456,    0.6782,    0.7331,    0.6205,    0.6786,    0.8033},
     269{    0.6910,    0.7332,    0.8750,    0.6697,    0.8119,    0.6608,    0.7235,    0.7261,    0.7142,    0.8595},
     270{    0.6467,    0.7493,    0.6821,    0.6133,    0.6857,    0.6692,    0.7265,    0.8252,    0.7259,    0.7506},
     271          },
     272        new double[][,]
     273          {
     274            new double[,] {
     275{    0.4578,    0.4717,    0.2318,    0.4642,    0.3430,    0.4841,    0.4117,    0.3485,    0.4170,    0.2781},
     276{    0.4373,    0.3856,    0.3808,    0.4468,    0.3645,    0.4738,    0.4080,    0.2761,    0.3758,    0.2952},
     277{    0.3244,    0.3458,    0.2445,    0.3973,    0.4629,    0.3127,    0.2524,    0.4132,    0.3421,    0.2607},
     278{    0.3214,    0.4679,    0.3195,    0.3750,    0.4932,    0.4535,    0.1851,    0.2015,    0.2204,    0.2712},
     279{    0.1955,    0.4507,    0.3295,    0.1752,    0.4981,    0.4894,    0.3104,    0.1418,    0.1610,    0.2213},
     280{    0.2084,    0.3607,    0.3861,    0.2621,    0.4877,    0.4512,    0.2138,    0.0915,    0.0887,    0.2199},
     281{    0.4411,    0.3416,    0.3658,    0.4587,    0.2116,    0.4627,    0.4191,    0.4345,    0.4127,    0.2770},
     282{    0.4421,    0.4335,    0.2864,    0.4687,    0.3793,    0.4365,    0.3913,    0.4710,    0.4362,    0.3160},
     283{    0.4270,    0.3912,    0.2187,    0.4424,    0.3054,    0.4483,    0.4001,    0.3977,    0.4082,    0.2415},
     284{    0.4570,    0.3757,    0.4337,    0.4743,    0.4310,    0.4427,    0.3974,    0.2885,    0.3980,    0.3744},
     285            },
     286            new double[,] {
     287{    1.2905,    1.2380,    1.7324,    1.2677,    1.5604,    1.1785,    1.4203,    1.5505,    1.4074,    1.6661},
     288{    1.3541,    1.4784,    1.4883,    1.3260,    1.5205,    1.2287,    1.4290,    1.6691,    1.4983,    1.6400},
     289{    1.5926,    1.5553,    1.7148,    1.4532,    1.2723,    1.6120,    1.7037,    1.4168,    1.5620,    1.6918},
     290{    1.5976,    1.2535,    1.6008,    1.5000,    1.1166,    1.3049,    1.7936,    1.7727,    1.7478,    1.6765},
     291{    1.7803,    1.3141,    1.5839,    1.8060,    1.0609,    1.1453,    1.6157,    1.8464,    1.8234,    1.7466},
     292{    1.7637,    1.5278,    1.4774,    1.6898,    1.1570,    1.3125,    1.7566,    1.9039,    1.9070,    1.7485},
     293{    1.3433,    1.5628,    1.5180,    1.2873,    1.7594,    1.2733,    1.4024,    1.3619,    1.4179,    1.6679},
     294{    1.3404,    1.3646,    1.6537,    1.2501,    1.4913,    1.3564,    1.4662,    1.2410,    1.3572,    1.6066},
     295{    1.3820,    1.4665,    1.7501,    1.3395,    1.6239,    1.3216,    1.4470,    1.4522,    1.4285,    1.7190},
     296{    1.2934,    1.4986,    1.3642,    1.2267,    1.3714,    1.3384,    1.4531,    1.6503,    1.4517,    1.5012},
     297          },
     298                      new double[,] {
     299{   -0.0538,   -0.0611,   -0.0085,   -0.0569,   -0.0222,   -0.0696,   -0.0372,   -0.0231,   -0.0388,   -0.0131},
     300{   -0.0454,   -0.0306,   -0.0295,   -0.0490,   -0.0261,   -0.0624,   -0.0362,   -0.0129,   -0.0284,   -0.0151},
     301{   -0.0192,   -0.0226,   -0.0096,   -0.0334,   -0.0563,   -0.0175,   -0.0104,   -0.0377,   -0.0220,   -0.0112},
     302{   -0.0187,   -0.0589,   -0.0184,   -0.0283,   -0.0788,   -0.0519,   -0.0051,   -0.0062,   -0.0076,   -0.0123},
     303{   -0.0058,   -0.0506,   -0.0200,   -0.0045,   -0.0873,   -0.0745,   -0.0171,   -0.0029,   -0.0038,   -0.0077},
     304{   -0.0067,   -0.0254,   -0.0307,   -0.0114,   -0.0728,   -0.0508,   -0.0071,   -0.0011,   -0.0011,   -0.0076},
     305{   -0.0468,   -0.0219,   -0.0264,   -0.0542,   -0.0069,   -0.0561,   -0.0394,   -0.0444,   -0.0375,   -0.0130},
     306{   -0.0472,   -0.0441,   -0.0140,   -0.0594,   -0.0292,   -0.0451,   -0.0319,   -0.0606,   -0.0450,   -0.0179},
     307{   -0.0419,   -0.0319,   -0.0075,   -0.0473,   -0.0165,   -0.0496,   -0.0341,   -0.0335,   -0.0363,   -0.0094},
     308{   -0.0534,   -0.0284,   -0.0441,   -0.0627,   -0.0432,   -0.0474,   -0.0334,   -0.0143,   -0.0336,   -0.0281},
     309          }
     310          }
     311      );
     312      TestCovarianceFunction(new CovarianceRQiso(), 1,
     313         new double[,]
     314           {
     315{    6.8660,    6.8070,    7.2367,    6.8409,    7.1145,    6.7347,    6.9959,    7.1068,    6.9839,    7.1923},
     316{    6.9324,    7.0474,    7.0559,    6.9038,    7.0827,    6.7961,    7.0038,    7.1944,    7.0644,    7.1739},
     317{    7.1392,    7.1106,    7.2253,    7.0255,    6.8461,    7.1536,    7.2179,    6.9926,    7.1158,    7.2099},
     318{    7.1429,    6.8249,    7.1453,    7.0658,    6.6525,    6.8816,    7.2752,    7.2623,    7.2467,    7.1995},
     319{    7.2671,    6.8913,    7.1326,    7.2827,    6.5716,    6.6915,    7.1564,    7.3065,    7.2931,    7.2459},
     320{    7.2567,    7.0886,    7.0466,    7.2086,    6.7069,    6.8897,    7.2522,    7.3388,    7.3405,    7.2471},
     321{    6.9215,    7.1164,    7.0807,    6.8626,    7.2540,    6.8471,    6.9792,    6.9401,    6.9937,    7.1935},
     322{    6.9185,    6.9428,    7.1836,    6.8210,    7.0584,    6.9346,    7.0369,    6.8105,    6.9354,    7.1496},
     323{    6.9598,    7.0372,    7.2481,    6.9176,    7.1623,    6.8992,    7.0200,    7.0247,    7.0033,    7.2280},
     324{    6.8692,    7.0646,    6.9424,    6.7937,    6.9495,    6.9165,    7.0254,    7.1813,    7.0242,    7.0668},
     325           },
     326         new double[][,]
     327          {
     328            new double[,] {
     329{    0.9946,    1.1004,    0.3003,    1.0398,    0.5350,    1.2280,    0.7575,    0.5497,    0.7796,    0.3863},
     330{    0.8743,    0.6614,    0.6455,    0.9263,    0.5952,    1.1197,    0.7428,    0.3823,    0.6297,    0.4217},
     331{    0.4881,    0.5425,    0.3225,    0.7023,    1.0304,    0.4606,    0.3369,    0.7635,    0.5326,    0.3523},
     332{    0.4810,    1.0684,    0.4764,    0.6270,    1.3705,    0.9666,    0.2253,    0.2504,    0.2810,    0.3725},
     333{    0.2412,    0.9489,    0.5007,    0.2106,    1.5081,    1.3031,    0.4553,    0.1639,    0.1902,    0.2825},
     334{    0.2614,    0.5840,    0.6630,    0.3549,    1.2764,    0.9519,    0.2702,    0.1000,    0.0967,    0.2802},
     335{    0.8941,    0.5314,    0.5990,    1.0007,    0.2666,    1.0286,    0.7883,    0.8600,    0.7615,    0.3839},
     336{    0.8995,    0.8552,    0.4030,    1.0754,    0.6409,    0.8701,    0.6811,    1.0941,    0.8687,    0.4682},
     337{    0.8240,    0.6807,    0.2782,    0.9012,    0.4439,    0.9346,    0.7126,    0.7040,    0.7436,    0.3172},
     338{    0.9889,    0.6293,    0.8560,    1.1240,    0.8429,    0.9031,    0.7025,    0.4076,    0.7048,    0.6252},
     339            },
     340            new double[,] {
     341{   13.7321,   13.6139,   14.4735,   13.6818,   14.2291,   13.4693,   13.9917,   14.2135,   13.9678,   14.3846},
     342{   13.8647,   14.0949,   14.1118,   13.8076,   14.1654,   13.5922,   14.0076,   14.3888,   14.1287,   14.3478},
     343{   14.2784,   14.2211,   14.4506,   14.0511,   13.6922,   14.3072,   14.4358,   13.9852,   14.2316,   14.4199},
     344{   14.2859,   13.6498,   14.2906,   14.1315,   13.3049,   13.7631,   14.5504,   14.5247,   14.4933,   14.3990},
     345{   14.5341,   13.7827,   14.2652,   14.5654,   13.1433,   13.3830,   14.3128,   14.6130,   14.5862,   14.4918},
     346{   14.5134,   14.1773,   14.0932,   14.4172,   13.4138,   13.7793,   14.5045,   14.6776,   14.6810,   14.4942},
     347{   13.8429,   14.2328,   14.1613,   13.7253,   14.5081,   13.6943,   13.9583,   13.8803,   13.9873,   14.3871},
     348{   13.8370,   13.8855,   14.3672,   13.6420,   14.1168,   13.8693,   14.0738,   13.6210,   13.8709,   14.2993},
     349{   13.9195,   14.0743,   14.4962,   13.8352,   14.3246,   13.7985,   14.0400,   14.0493,   14.0067,   14.4561},
     350{   13.7384,   14.1291,   13.8847,   13.5873,   13.8990,   13.8331,   14.0508,   14.3625,   14.0484,   14.1335},
     351            },
     352            new double[,] {
     353{   -0.0067,   -0.0083,   -0.0006,   -0.0074,   -0.0019,   -0.0105,   -0.0038,   -0.0020,   -0.0041,   -0.0010},
     354{   -0.0051,   -0.0029,   -0.0027,   -0.0058,   -0.0023,   -0.0087,   -0.0037,   -0.0009,   -0.0026,   -0.0011},
     355{   -0.0015,   -0.0019,   -0.0007,   -0.0033,   -0.0073,   -0.0014,   -0.0007,   -0.0039,   -0.0019,   -0.0008},
     356{   -0.0015,   -0.0078,   -0.0015,   -0.0026,   -0.0133,   -0.0064,   -0.0003,   -0.0004,   -0.0005,   -0.0009},
     357{   -0.0004,   -0.0061,   -0.0016,   -0.0003,   -0.0164,   -0.0120,   -0.0013,   -0.0002,   -0.0002,   -0.0005},
     358{   -0.0004,   -0.0022,   -0.0029,   -0.0008,   -0.0114,   -0.0062,   -0.0005,   -0.0001,   -0.0001,   -0.0005},
     359{   -0.0054,   -0.0018,   -0.0024,   -0.0068,   -0.0005,   -0.0072,   -0.0042,   -0.0050,   -0.0039,   -0.0009},
     360{   -0.0055,   -0.0049,   -0.0010,   -0.0080,   -0.0027,   -0.0051,   -0.0031,   -0.0082,   -0.0051,   -0.0014},
     361{   -0.0046,   -0.0031,   -0.0005,   -0.0055,   -0.0013,   -0.0059,   -0.0034,   -0.0033,   -0.0037,   -0.0006},
     362{   -0.0067,   -0.0026,   -0.0049,   -0.0087,   -0.0048,   -0.0055,   -0.0033,   -0.0011,   -0.0033,   -0.0026},                             
     363                           }
     364          }
     365       );
     366    }
     367
    256368
    257369    [TestMethod]
     
    335447              },
    336448          }
    337       );
     449      , 5e-3);
    338450      TestCovarianceFunction(new CovariancePeriodic(), 1,
    339451        new double[,]
     
    393505              },
    394506          }
    395       );
     507      , 5e-3);
    396508    }
    397509
     
    781893              },
    782894          }
    783       );
    784     }
    785 
    786 
    787     private void TestCovarianceFunction(ICovarianceFunction cf, double hypValue, double[,] expectedCov, double[][,] expectedGradients) {
     895      , 5e-3);
     896    }
     897
     898
     899    private void TestCovarianceFunction(ICovarianceFunction cf, double hypValue, double[,] expectedCov, double[][,] expectedGradients, double delta = 1E-3) {
    788900      var x = GetData();
    789901      var xt = GetDataTest();
     
    801913          actualCov[i, j] = cf.GetCovariance(i, j);
    802914
    803       AssertEqual(expectedCov, actualCov);
     915      AssertEqual(expectedCov, actualCov, delta);
    804916
    805917      for (int i = 0; i < rows0; i++)
    806918        for (int j = 0; j < rows1; j++) {
    807919          for (int k = 0; k < nHyp; k++)
    808             Assert.AreEqual(expectedGradients[k][i, j], cf.GetGradient(i, j, k), 5E-3);
     920            Assert.AreEqual(expectedGradients[k][i, j], cf.GetGradient(i, j, k), delta);
    809921        }
    810922    }
     
    836948        Assert.AreEqual(expected[i], actual[i], 1E-3);
    837949    }
    838     private void AssertEqual(double[,] expected, double[,] actual) {
     950    private void AssertEqual(double[,] expected, double[,] actual, double delta = 5e-3) {
    839951      Assert.AreEqual(expected.Length, actual.Length);
    840952      for (int i = 0; i < expected.GetLength(0); i++)
    841953        for (int j = 0; j < expected.GetLength(1); j++)
    842           Assert.AreEqual(expected[i, j], actual[i, j], 5E-3);
     954          Assert.AreEqual(expected[i, j], actual[i, j], delta);
    843955    }
    844956
Note: See TracChangeset for help on using the changeset viewer.