[mlpack-svn] r16059 - mlpack/trunk/src/mlpack/tests

fastlab-svn at coffeetalk-1.cc.gatech.edu fastlab-svn at coffeetalk-1.cc.gatech.edu
Thu Nov 21 13:34:50 EST 2013


Author: rcurtin
Date: Thu Nov 21 13:34:50 2013
New Revision: 16059

Log:
Test constructor that takes an instantiated optimizer.


Modified:
   mlpack/trunk/src/mlpack/tests/logistic_regression_test.cpp

Modified: mlpack/trunk/src/mlpack/tests/logistic_regression_test.cpp
==============================================================================
--- mlpack/trunk/src/mlpack/tests/logistic_regression_test.cpp	(original)
+++ mlpack/trunk/src/mlpack/tests/logistic_regression_test.cpp	Thu Nov 21 13:34:50 2013
@@ -475,7 +475,6 @@
 
   // Create a logistic regression object using L-BFGS (that is the default).
   LogisticRegression<> lr(data, responses);
-  Log::Warn << "Parameters: " << lr.Parameters() << "\n";
 
   // Test sigmoid function.
   arma::vec sigmoids = 1 / (1 + arma::exp(-lr.Parameters()[0]
@@ -651,4 +650,45 @@
   BOOST_REQUIRE_CLOSE(testAcc, 100.0, 0.5); // 0.5% error tolerance.
 }
 
+/**
+ * Test constructor that takes an already-instantiated optimizer.
+ */
+BOOST_AUTO_TEST_CASE(LogisticRegressionInstantiatedOptimizer)
+{
+  // Very simple fake dataset.
+  arma::mat data("1 2 3;"
+                 "1 2 3");
+  arma::vec responses("1 1 0");
+
+  // Create an optimizer and function.
+  LogisticRegressionFunction lrf(data, responses, 0.001);
+  L_BFGS<LogisticRegressionFunction> lbfgsOpt(lrf);
+  lbfgsOpt.MinGradientNorm() = 1e-50;
+  LogisticRegression<L_BFGS> lr(lbfgsOpt);
+
+  // Test sigmoid function.
+  arma::vec sigmoids = 1 / (1 + arma::exp(-lr.Parameters()[0]
+      - data.t() * lr.Parameters().subvec(1, lr.Parameters().n_elem - 1)));
+
+  // Error tolerance is small because we tightened the optimizer tolerance.
+  BOOST_REQUIRE_CLOSE(sigmoids[0], 1.0, 0.1);
+  BOOST_REQUIRE_CLOSE(sigmoids[1], 1.0, 0.5);
+  BOOST_REQUIRE_SMALL(sigmoids[2], 0.1);
+
+  // Now do the same with SGD.
+  SGD<LogisticRegressionFunction> sgdOpt(lrf);
+  sgdOpt.StepSize() = 0.15;
+  sgdOpt.Tolerance() = 1e-75;
+  LogisticRegression<SGD> lr2(sgdOpt);
+
+  // Test sigmoid function.
+  sigmoids = 1 / (1 + arma::exp(-lr2.Parameters()[0]
+      - data.t() * lr2.Parameters().subvec(1, lr2.Parameters().n_elem - 1)));
+
+  // Error tolerance is small because we tightened the optimizer tolerance.
+  BOOST_REQUIRE_CLOSE(sigmoids[0], 1.0, 0.1);
+  BOOST_REQUIRE_CLOSE(sigmoids[1], 1.0, 0.5);
+  BOOST_REQUIRE_SMALL(sigmoids[2], 0.1);
+}
+
 BOOST_AUTO_TEST_SUITE_END();



More information about the mlpack-svn mailing list