From bb4955fbb1ad7dac5e1eafae26d1c887dcb7a2cb Mon Sep 17 00:00:00 2001 From: Roberto Hueso Gomez Date: Mon, 26 Aug 2019 19:34:46 +0200 Subject: [PATCH] Add GaussianCoverSingleKDETest --- src/mlpack/tests/kde_test.cpp | 37 ++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/src/mlpack/tests/kde_test.cpp b/src/mlpack/tests/kde_test.cpp index b69ef84854..24dd12c314 100644 --- a/src/mlpack/tests/kde_test.cpp +++ b/src/mlpack/tests/kde_test.cpp @@ -214,13 +214,48 @@ BOOST_AUTO_TEST_CASE(EpanechnikovCoverSingleKDETest) // Brute force KDE. EpanechnikovKernel kernel(kernelBandwidth); BruteForceKDE(reference, + query, + bfEstimations, + kernel); + + // Optimized KDE. + metric::EuclideanDistance metric; + KDE + kde(relError, 0.0, kernel, KDEMode::SINGLE_TREE_MODE, metric); + kde.Train(reference); + kde.Evaluate(query, treeEstimations); + + // Check whether results are equal. + for (size_t i = 0; i < query.n_cols; ++i) + BOOST_REQUIRE_CLOSE(bfEstimations[i], treeEstimations[i], relError*100); +} + +/** + * Test single-tree implementation results against brute force results using + * a cover-tree and Gaussian kernel. + */ +BOOST_AUTO_TEST_CASE(GaussianCoverSingleKDETest) +{ + arma::mat reference = arma::randu(2, 300); + arma::mat query = arma::randu(2, 100); + arma::vec bfEstimations = arma::vec(query.n_cols, arma::fill::zeros); + arma::vec treeEstimations = arma::vec(query.n_cols, arma::fill::zeros); + const double kernelBandwidth = 1.1; + const double relError = 0.08; + + // Brute force KDE. + GaussianKernel kernel(kernelBandwidth); + BruteForceKDE(reference, query, bfEstimations, kernel); // Optimized KDE. metric::EuclideanDistance metric; - KDE