public void TestKernel() { var methodName = MethodBase.GetCurrentMethod().Name; TestUtils.ShowStarting(methodName); var x = new [] { .2, .3 }; var y = new [] { .1, .4 }; var z = new [] { .3, .4 }; var kernelEstimator = new KernelDensityEstimator(); //kernelEstimator.AddObservation(x); //kernelEstimator.AddObservation(y); Console.WriteLine(kernelEstimator.HasObservation()); var estimation = kernelEstimator.GetDensityEstimation(z, .1, 0); if (estimation == null) { return; } foreach (var e in estimation) { Console.WriteLine(e); } }
public void SampleCompare() { var kde = new KernelDensityEstimator(0.02f); //DensityEstimationTests.RunSampleTest(kde, x => x); DensityEstimationTests.RunSampleTest(kde, x => ColumnVector1D.Create(x.Value)); }
public void ProbabilityOf_LinearSample() { var kde = new KernelDensityEstimator(); var data = Enumerable.Range(1, 100).Select(n => (n).OutOf(100)).AsQueryable(); var sample = new ContinuousSample<Fraction>(data, kde); foreach(var x in Enumerable.Range(1, 100)) { Console.WriteLine("{0}\t{1}", x, sample.DensityOf(x.OutOf(100)).Value); } }
public void KDETestGaussianKernelBandwidth2() { var kde = new KernelDensityEstimator(_testData); kde.Bandwidth = 2.0d; var estimate = kde.EstimateDensity(-3.5); AssertHelpers.AlmostEqualRelative(0.046875864115900, estimate, 10); estimate = kde.EstimateDensity(0); AssertHelpers.AlmostEqualRelative(0.186580447512078, estimate, 10); estimate = kde.EstimateDensity(2); AssertHelpers.AlmostEqualRelative(0.123339405007761, estimate, 10); }
public void KDETestGaussianKernelBandwidth0p5() { var kde = new KernelDensityEstimator(_testData); kde.Bandwidth = 0.5d; var estimate = kde.EstimateDensity(-3.5); AssertHelpers.AlmostEqualRelative(5.311490430807364e-007, estimate, 10); estimate = kde.EstimateDensity(0); AssertHelpers.AlmostEqualRelative(0.369994803886827, estimate, 10); estimate = kde.EstimateDensity(2); AssertHelpers.AlmostEqualRelative(0.032447347007482, estimate, 10); }
public void ProbabilityOf_RandomSample() { var kde = new KernelDensityEstimator(); var data = Enumerable.Range(1, 50).Select(n => Fraction.Random(100, 1)).AsQueryable(); var sample = new ContinuousSample<Fraction>(data, kde); foreach (var x in Enumerable.Range(1, 100)) { try { Console.WriteLine("{0}\t{1}", x, sample.DensityOf(x.OutOf(100)).Value); } catch (DivideByZeroException) { Console.WriteLine("Divide by zero error: {0}", x); } } }
public void KDETestGaussianKernelBandwidth1() { var kde = new KernelDensityEstimator(_testData); Assert.AreEqual(KDEKernelType.Gaussian, kde.KernelType); Assert.AreEqual(1.0d, kde.Bandwidth); AssertHelpers.AlmostEqualRelative(0.398942280401433, kde.Kernel(0), 10); //Density of standard normal distribution at 0 var estimate = kde.EstimateDensity(-3.5); AssertHelpers.AlmostEqualRelative(0.004115405028907, estimate, 10); estimate = kde.EstimateDensity(0); AssertHelpers.AlmostEqualRelative(0.310485907659139, estimate, 10); estimate = kde.EstimateDensity(2); AssertHelpers.AlmostEqualRelative(0.099698581377801, estimate, 10); }
public void KDETestTriangularKernelBandwidth1() { var kde = new KernelDensityEstimator(_testData); kde.KernelType = KDEKernelType.Triangular; Assert.AreEqual(KDEKernelType.Triangular, kde.KernelType); Assert.AreEqual(1.0d, kde.Bandwidth); Assert.AreEqual(1.0d, kde.Kernel(0)); //Density of standard normal distribution at 0 var estimate = kde.EstimateDensity(-3.5); AssertHelpers.AlmostEqualRelative(0, estimate, 10); estimate = kde.EstimateDensity(0); AssertHelpers.AlmostEqualRelative(0.347688490533868, estimate, 10); estimate = kde.EstimateDensity(2); AssertHelpers.AlmostEqualRelative(0.004216757636608, estimate, 10); }
public void KDETestEpanechnikovKernelBandwidth1() { var kde = new KernelDensityEstimator(_testData); kde.KernelType = KDEKernelType.Epanechnikov; Assert.AreEqual(KDEKernelType.Epanechnikov, kde.KernelType); Assert.AreEqual(1.0d, kde.Bandwidth); Assert.AreEqual(0.75d, kde.Kernel(0)); var estimate = kde.EstimateDensity(-3.5); AssertHelpers.AlmostEqualRelative(0, estimate, 10); estimate = kde.EstimateDensity(0); AssertHelpers.AlmostEqualRelative(0.353803214812608, estimate, 10); estimate = kde.EstimateDensity(2); AssertHelpers.AlmostEqualRelative(0.006248168996717, estimate, 10); }
public void KDETestUniformKernelBandwidth1() { var kde = new KernelDensityEstimator(_testData); kde.KernelType = KDEKernelType.Uniform; Assert.AreEqual(KDEKernelType.Uniform, kde.KernelType); Assert.AreEqual(1.0d, kde.Bandwidth); Assert.AreEqual(0.5d, kde.Kernel(0)); var estimate = kde.EstimateDensity(-3.5); AssertHelpers.AlmostEqualRelative(0, estimate, 10); estimate = kde.EstimateDensity(0); AssertHelpers.AlmostEqualRelative(0.35, estimate, 10); estimate = kde.EstimateDensity(2); AssertHelpers.AlmostEqualRelative(0.1, estimate, 10); }
public void KDETestCustomKernelBandwidth1() { var kde = new KernelDensityEstimator(_testData); kde.Bandwidth = 1.0d; kde.Kernel = x => 0.5d * Math.Exp(-Math.Abs(x)); //Picard-Kernel Assert.AreEqual(KDEKernelType.Custom, kde.KernelType); Assert.AreEqual(1.0d, kde.Bandwidth); Assert.AreEqual(0.5d, kde.Kernel(0)); var estimate = kde.EstimateDensity(-3.5); AssertHelpers.AlmostEqualRelative(0.018396636706009, estimate, 10); estimate = kde.EstimateDensity(0); AssertHelpers.AlmostEqualRelative(0.272675897096678, estimate, 10); estimate = kde.EstimateDensity(2); AssertHelpers.AlmostEqualRelative(0.092580285110347, estimate, 10); }
protected void CalculateDensity(Series series, List <double> row, double bandwidth = double.NaN) { string densitySeriesName = "Density " + series.Name; double stepWidth = series.Points[1].XValue - series.Points[0].XValue; var rowArray = row.ToArray(); if (chart.Series.Any(x => x.Name == densitySeriesName)) { var ds = chart.Series.Single(x => x.Name == densitySeriesName); chart.Series.Remove(ds); } if (double.IsNaN(bandwidth)) { bandwidth = KernelDensityEstimator.EstimateBandwidth(rowArray); decimal bwDecimal = (decimal)bandwidth; if (bwDecimal < bandwidthMin) { bwDecimal = bandwidthMin; bandwidth = decimal.ToDouble(bwDecimal); } suppressUpdate = true; bandwidthNumericUpDown.Value = bwDecimal; } var density = KernelDensityEstimator.Density(rowArray, rowArray.Length, stepWidth, bandwidth); Series newSeries = new Series(densitySeriesName); newSeries.Color = series.Color; newSeries.ChartType = SeriesChartType.FastLine; newSeries.BorderWidth = 2; foreach (var d in density) { newSeries.Points.Add(new DataPoint(d.Item1, d.Item2)); } // densities should be plotted on the second axis (different scale) newSeries.YAxisType = AxisType.Secondary; chart.Series.Add(newSeries); }
public void Evaluate_NormalSample() { var sample = Enumerable .Range(1, 10) .Select(n => new { p = Functions.NormalDistribution(n, 2.87f, 5), n = n }) .SelectMany(x => Enumerable.Range(1, (int)(x.p * 100)).Select(n => (x.n).OutOf(10))) .ToList() .AsQueryable(); var hist = new Histogram(0.02f); var kde = new KernelDensityEstimator(0.02f); var histF = hist.Evaluate(sample); var kdeF = kde.Evaluate(sample); var stdDevMu = Functions.MeanStdDev(sample); Console.WriteLine("Mean\t{0}", stdDevMu.Item1); Console.WriteLine("StdDev\t{0}", stdDevMu.Item2); var hRes = Enumerable.Range(1, 10).Select(n => new { n = n, p = histF(n.OutOf(10)) }); var kRes = Enumerable.Range(1, 10).Select(n => kdeF(n.OutOf(10))).Normalise().ToList(); int i = 0; foreach (var x in hRes) { var kr = kRes[i++]; Console.WriteLine("{0}\t{1}\t{2}", x.n, x.p.Value, kr.Value); Assert.That(Math.Round(x.p.Value, 4), Is.EqualTo(Math.Round(kr.Value, 4))); } }