From 74d44821014fbe5de4c2d75748479228e8167ef5 Mon Sep 17 00:00:00 2001 From: Saurabh7 Date: Tue, 14 Jun 2016 20:02:56 +0530 Subject: [PATCH] replace lapack calls and update test --- .../regression/LeastAngleRegression.cpp | 11 ++---- tests/unit/regression/lars_unittest.cc | 38 +++++++++++++++++-- 2 files changed, 38 insertions(+), 11 deletions(-) diff --git a/src/shogun/regression/LeastAngleRegression.cpp b/src/shogun/regression/LeastAngleRegression.cpp index 539fba7d097..541579b2142 100644 --- a/src/shogun/regression/LeastAngleRegression.cpp +++ b/src/shogun/regression/LeastAngleRegression.cpp @@ -10,15 +10,12 @@ #include -#ifdef HAVE_LAPACK - #include #include #include #include #include -#include #include #include #include @@ -300,10 +297,9 @@ bool CLeastAngleRegression::train_machine(CFeatures* data) float64_t l1_prev = SGVector::onenorm(&m_beta_path[nloop][0], n_fea); float64_t s = (m_max_l1_norm-l1_prev)/(l1-l1_prev); - // beta = beta_prev + s*(beta-beta_prev) - // = (1-s)*beta_prev + s*beta - cblas_dscal(n_fea, s, &beta[0], 1); - cblas_daxpy(n_fea, 1-s, &m_beta_path[nloop][0], 1, &beta[0], 1); + Map map_beta(&beta[0], n_fea); + Map map_beta_prev(&m_beta_path[nloop][0], n_fea); + map_beta = (1-s)*map_beta_prev + s*map_beta; } } @@ -403,4 +399,3 @@ SGMatrix CLeastAngleRegression::cholesky_delete(SGMatrix& return nR; } -#endif // HAVE_LAPACK diff --git a/tests/unit/regression/lars_unittest.cc b/tests/unit/regression/lars_unittest.cc index 3292df08c3d..e99806c9449 100644 --- a/tests/unit/regression/lars_unittest.cc +++ b/tests/unit/regression/lars_unittest.cc @@ -40,7 +40,6 @@ using namespace Eigen; using namespace shogun; -#ifdef HAVE_LAPACK //Generate the Data that N is greater than D void generate_data_n_greater_d(SGMatrix &data, SGVector &lab) @@ -300,8 +299,8 @@ TEST(LeastAngleRegression, ols_equivalence) SGVector lab=SGVector(n_vec); lab.random(0.0,1.0); - float64_t mean=linalg::mean(lab); + for (index_t i=0; i data(3,5); + SGVector lab(5); + generate_data_n_greater_d(data, lab); + + CDenseFeatures* features=new CDenseFeatures(data); + SG_REF(features); + CRegressionLabels* labels=new CRegressionLabels(lab); + SG_REF(labels); + CLeastAngleRegression* lars=new CLeastAngleRegression(false); + lars->set_labels((CLabels*) labels); + // set max l1 norm + lars->set_max_l1_norm(1); + lars->train(features); + + SGVector active2=SGVector(lars->get_w_for_var(2)); + SGVector active1=SGVector(lars->get_w_for_var(1)); + + float64_t epsilon=0.000000000001; + + EXPECT_NEAR(active2[0],0.453702890189,epsilon); + EXPECT_NEAR(active2[1],0.000000000000,epsilon); + EXPECT_NEAR(active2[2],0.546297109810,epsilon); + + EXPECT_NEAR(active1[0],0.000000000000,epsilon); + EXPECT_NEAR(active1[1],0.000000000000,epsilon); + EXPECT_NEAR(active1[2],0.092594219621,epsilon); + + SG_UNREF(lars); + SG_UNREF(features); + SG_UNREF(labels); +} +