[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