[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