[mlpack-svn] r10291 - mlpack/trunk/src/mlpack/tests
fastlab-svn at coffeetalk-1.cc.gatech.edu
fastlab-svn at coffeetalk-1.cc.gatech.edu
Wed Nov 16 01:38:17 EST 2011
Author: rcurtin
Date: 2011-11-16 01:38:16 -0500 (Wed, 16 Nov 2011)
New Revision: 10291
Added:
mlpack/trunk/src/mlpack/tests/distribution_test.cpp
Modified:
mlpack/trunk/src/mlpack/tests/CMakeLists.txt
Log:
Add tests for DiscreteDistribution. These all work.
Modified: mlpack/trunk/src/mlpack/tests/CMakeLists.txt
===================================================================
--- mlpack/trunk/src/mlpack/tests/CMakeLists.txt 2011-11-16 06:38:08 UTC (rev 10290)
+++ mlpack/trunk/src/mlpack/tests/CMakeLists.txt 2011-11-16 06:38:16 UTC (rev 10291)
@@ -15,6 +15,7 @@
allkfn_test.cpp
allknn_test.cpp
cli_test.cpp
+ distribution_test.cpp
emst_test.cpp
hmm_test.cpp
infomax_ica_test.cpp
Added: mlpack/trunk/src/mlpack/tests/distribution_test.cpp
===================================================================
--- mlpack/trunk/src/mlpack/tests/distribution_test.cpp (rev 0)
+++ mlpack/trunk/src/mlpack/tests/distribution_test.cpp 2011-11-16 06:38:16 UTC (rev 10291)
@@ -0,0 +1,117 @@
+/**
+ * @file distribution_test.cpp
+ * @author Ryan Curtin
+ *
+ * Test for the mlpack::distribution::DiscreteDistribution class.
+ */
+#include <mlpack/core.h>
+#include <mlpack/methods/hmm/distributions/discrete_distribution.hpp>
+
+#include <boost/test/unit_test.hpp>
+
+using namespace mlpack;
+using namespace mlpack::distribution;
+
+BOOST_AUTO_TEST_SUITE(DistributionTest)
+
+/**
+ * Make sure we initialize correctly.
+ */
+BOOST_AUTO_TEST_CASE(DiscreteDistributionConstructorTest)
+{
+ DiscreteDistribution d(5);
+
+ BOOST_REQUIRE_EQUAL(d.Probabilities().n_elem, 5);
+}
+
+/**
+ * Make sure we get the probabilities of observations right.
+ */
+BOOST_AUTO_TEST_CASE(DiscreteDistributionProbabilityTest)
+{
+ DiscreteDistribution d(5);
+
+ d.Probabilities("0.2 0.4 0.1 0.1 0.2");
+
+ BOOST_REQUIRE_CLOSE(d.Probability(0), 0.2, 1e-5);
+ BOOST_REQUIRE_CLOSE(d.Probability(1), 0.4, 1e-5);
+ BOOST_REQUIRE_CLOSE(d.Probability(2), 0.1, 1e-5);
+ BOOST_REQUIRE_CLOSE(d.Probability(3), 0.1, 1e-5);
+ BOOST_REQUIRE_CLOSE(d.Probability(4), 0.2, 1e-5);
+}
+
+/**
+ * Make sure we get random observations correct.
+ */
+BOOST_AUTO_TEST_CASE(DiscreteDistributionRandomTest)
+{
+ DiscreteDistribution d(3);
+
+ d.Probabilities("0.3 0.6 0.1");
+
+ arma::vec actualProb(3);
+
+ for (size_t i = 0; i < 10000; i++)
+ actualProb(d.Random())++;
+
+ // Normalize.
+ actualProb /= accu(actualProb);
+
+ // 5% tolerance, because this can be a noisy process.
+ BOOST_REQUIRE_CLOSE(actualProb(0), 0.3, 5.0);
+ BOOST_REQUIRE_CLOSE(actualProb(1), 0.6, 5.0);
+ BOOST_REQUIRE_CLOSE(actualProb(2), 0.1, 5.0);
+}
+
+/**
+ * Make sure we can estimate from observations correctly.
+ */
+BOOST_AUTO_TEST_CASE(DiscreteDistributionEstimateTest)
+{
+ DiscreteDistribution d(4);
+
+ std::vector<size_t> obs;
+ obs.push_back(0);
+ obs.push_back(0);
+ obs.push_back(1);
+ obs.push_back(1);
+ obs.push_back(2);
+ obs.push_back(2);
+ obs.push_back(2);
+ obs.push_back(3);
+
+ d.Estimate(obs);
+
+ BOOST_REQUIRE_CLOSE(d.Probability(0), 0.25, 1e-5);
+ BOOST_REQUIRE_CLOSE(d.Probability(1), 0.25, 1e-5);
+ BOOST_REQUIRE_CLOSE(d.Probability(2), 0.375, 1e-5);
+ BOOST_REQUIRE_CLOSE(d.Probability(3), 0.125, 1e-5);
+}
+
+/**
+ * Estimate from observations with probabilities.
+ */
+BOOST_AUTO_TEST_CASE(DiscreteDistributionEstimateProbTest)
+{
+ DiscreteDistribution d(3);
+
+ std::vector<size_t> obs;
+ obs.push_back(0);
+ obs.push_back(0);
+ obs.push_back(1);
+ obs.push_back(2);
+
+ std::vector<double> prob;
+ prob.push_back(0.25);
+ prob.push_back(0.25);
+ prob.push_back(0.5);
+ prob.push_back(1.0);
+
+ d.Estimate(obs, prob);
+
+ BOOST_REQUIRE_CLOSE(d.Probability(0), 0.25, 1e-5);
+ BOOST_REQUIRE_CLOSE(d.Probability(1), 0.25, 1e-5);
+ BOOST_REQUIRE_CLOSE(d.Probability(2), 0.5, 1e-5);
+}
+
+BOOST_AUTO_TEST_SUITE_END();
More information about the mlpack-svn
mailing list