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

fastlab-svn at coffeetalk-1.cc.gatech.edu fastlab-svn at coffeetalk-1.cc.gatech.edu
Tue Nov 8 22:51:57 EST 2011


Author: rcurtin
Date: 2011-11-08 22:51:57 -0500 (Tue, 08 Nov 2011)
New Revision: 10203

Modified:
   mlpack/trunk/src/mlpack/tests/linear_regression_test.cpp
Log:
A better test, but it's not quite working for some reason.


Modified: mlpack/trunk/src/mlpack/tests/linear_regression_test.cpp
===================================================================
--- mlpack/trunk/src/mlpack/tests/linear_regression_test.cpp	2011-11-09 03:51:41 UTC (rev 10202)
+++ mlpack/trunk/src/mlpack/tests/linear_regression_test.cpp	2011-11-09 03:51:57 UTC (rev 10203)
@@ -11,41 +11,53 @@
    */
   BOOST_AUTO_TEST_CASE(LinearRegressionTest)
   {
-    // predictors, points are 10x3 matrices
-    arma::mat predictors, points;
+    // Predictors and points are 100x3 matrices.
+    arma::mat predictors(3, 10);
+    arma::mat points(3, 10);
 
-    // responses is the "correct" value for each point in predictors, poitns
-    arma::colvec responses;
+    // Responses is the "correct" value for each point in predictors and points.
+    arma::colvec responses(10);
 
-    // the values we get back when we predict for points
-    arma::rowvec predictions;
+    // The values we get back when we predict for points.
+    arma::rowvec predictions(10);
 
-    // Initialize randomly
-    predictors.randu(3,10);
-    points.randu(3,10);
-    // add 3 so that we have two clusters of points
-    predictors.cols(0,4) += 3;
-    points.cols(0,4) += 3;
+    // We'll randomly select some coefficients for the linear response.
+    arma::vec coeffs;
+    coeffs.randu(4);
 
-    // Create y
-    responses.zeros(10);
-    // Create a second "class" for the first cluster of points
-    for(size_t i = 0; i < 5; ++i)
+    // Now generate each point.
+    for (size_t row = 0; row < 3; row++)
+      predictors.row(row) = arma::linspace<arma::rowvec>(0, 9, 10);
+
+    points = predictors;
+
+    // Now add a small amount of noise to each point.
+    for (size_t elem = 0; elem < points.n_elem; elem++)
     {
-      responses(i) = 1;
+      // Max added noise is 0.02.
+      points[elem] += ((double) rand() / (double) INT_MAX) / 50.0;
+      predictors[elem] += ((double) rand() / (double) INT_MAX) / 50.0;
     }
-    responses += 1; // "classes" are 2,1
 
-    predictions.zeros(responses.n_rows);
+    // Generate responses.
+    for (size_t elem = 0; elem < responses.n_elem; elem++)
+      responses[elem] = coeffs[0] +
+          dot(coeffs.rows(1, 3), arma::ones<arma::rowvec>(3) * elem);
 
     // Initialize and predict
     mlpack::linear_regression::LinearRegression lr(predictors, responses);
     lr.predict(predictions, points);
 
-    // Output result and verify we have less than 35% error from "correct" value
+    // Output result and verify we have less than 5% error from "correct" value
     // for each point
+    std::cout << "Actual model:\n" << coeffs << '\n';
+    std::cout << "Parameters:\n" << lr.getParameters() << '\n';
+    std::cout << "Predictors:\n" << predictors << '\n';
+    std::cout << "Points:\n" << points << '\n' << "Predictions:\n"
+        << predictions << '\n';
+    std::cout << "Correct:\n" << responses << '\n';
     for(size_t i = 0; i < predictions.n_cols; ++i)
-      BOOST_REQUIRE_CLOSE(predictions(i), responses(i), 35);
+      BOOST_REQUIRE_CLOSE(predictions(i), responses(i), 5);
   }
 
 BOOST_AUTO_TEST_SUITE_END();




More information about the mlpack-svn mailing list