From 5b1b62f9e09dd1d17f776ee1fcc0bd29dea92a39 Mon Sep 17 00:00:00 2001 From: schalkdaniel Date: Sat, 20 Jan 2018 12:41:38 +0100 Subject: [PATCH] add getter for parameter and update tests --- src/baselearner_track.cpp | 8 +++++--- src/compboost_modules.cpp | 33 +++++++++++++++++++++++---------- tests/testthat/test_compboost.R | 16 ++++++++++++++++ tutorials/compboost_class.R | 6 +++++- tutorials/compboost_vs_mboost.R | 11 +++++++++-- 5 files changed, 58 insertions(+), 16 deletions(-) diff --git a/src/baselearner_track.cpp b/src/baselearner_track.cpp index aad98d70..ad46a441 100644 --- a/src/baselearner_track.cpp +++ b/src/baselearner_track.cpp @@ -53,9 +53,11 @@ void BaselearnerTrack::InsertBaselearner (blearner::Baselearner* blearner, // Insert new baselearner: blearner_vector.push_back(blearner); + std::string insert_id = blearner->GetDataIdentifier() + ": " + blearner->GetBaselearnerType(); + // Check if the baselearner is the first one. If so, the parameter // has to be instantiated with a zero matrix: - std::map::iterator it = my_parameter_map.find(blearner->GetBaselearnerType()); + std::map::iterator it = my_parameter_map.find(insert_id); // Prune parameter by multiplying it with the learning rate: arma::mat parameter_temp = learning_rate * blearner->GetParameter(); @@ -65,7 +67,7 @@ void BaselearnerTrack::InsertBaselearner (blearner::Baselearner* blearner, // If this is the first entry, initialize it with zeros: arma::mat init_parameter(parameter_temp.n_rows, parameter_temp.n_cols, arma::fill::zeros); - my_parameter_map.insert(std::pair(blearner->GetBaselearnerType(), init_parameter)); + my_parameter_map.insert(std::pair(insert_id, init_parameter)); } @@ -73,7 +75,7 @@ void BaselearnerTrack::InsertBaselearner (blearner::Baselearner* blearner, // the non nan entries are added up: // arma::mat parameter_insert = parameter_temp + my_parameter_map.find(blearner->GetBaselearnerType())->second; // my_parameter_map.insert(std::pair(blearner->GetBaselearnerType(), parameter_insert)); - my_parameter_map[ blearner->GetBaselearnerType() ] = parameter_temp + my_parameter_map.find(blearner->GetBaselearnerType())->second; + my_parameter_map[ insert_id ] = parameter_temp + my_parameter_map.find(insert_id)->second; } diff --git a/src/compboost_modules.cpp b/src/compboost_modules.cpp index eebcb4de..f544b83f 100644 --- a/src/compboost_modules.cpp +++ b/src/compboost_modules.cpp @@ -572,16 +572,6 @@ class CompboostWrapper // std::cout << "<> Create Compboost" << std::endl; } - // Destructor: - ~CompboostWrapper () - { - // std::cout << "Call CompboostWrapper Destructor" << std::endl; - delete used_logger; - delete used_optimizer; - delete eval_data; - delete obj; - } - // Member functions void train (bool trace) { @@ -606,6 +596,28 @@ class CompboostWrapper ); } + Rcpp::List getEstimatedParameter () + { + std::map parameter = obj->GetParameter(); + + Rcpp::List out; + + for (auto &it : parameter) { + out[it.first] = it.second; + } + return out; + } + + // Destructor: + ~CompboostWrapper () + { + // std::cout << "Call CompboostWrapper Destructor" << std::endl; + // delete used_logger; + // delete used_optimizer; + // delete eval_data; + // delete obj; + } + private: blearnerlist::BaselearnerList* blearner_list_ptr; @@ -630,6 +642,7 @@ RCPP_MODULE (compboost_module) .method("getPrediction", &CompboostWrapper::getPrediction, "Get prediction") .method("getSelectedBaselearner", &CompboostWrapper::getSelectedBaselearner, "Get vector of selected baselearner") .method("getLoggerData", &CompboostWrapper::getLoggerData, "Get data of the used logger") + .method("getEstimatedParameter", &CompboostWrapper::getEstimatedParameter, "Get the estimated paraemter") ; } diff --git a/tests/testthat/test_compboost.R b/tests/testthat/test_compboost.R index 4c4f2900..45929760 100644 --- a/tests/testthat/test_compboost.R +++ b/tests/testthat/test_compboost.R @@ -105,6 +105,22 @@ test_that("compboost does the same as mboost", { # ------ expect_equal(predict(mod), cboost$getPrediction()) expect_equal(mod$xselect(), cboost.xselect) + expect_equal( + unname( + unlist( + mod$coef()[ + order( + unlist( + lapply(names(unlist(mod$coef()[1:3])), function (x) { + strsplit(x, "[.]")[[1]][2] + }) + ) + ) + ] + ) + ), + unname(unlist(cboost$getEstimatedParameter())) + ) expect_equal(dim(cboost$getLoggerData()$logger_data), c(500, 2)) expect_equal(cboost$getLoggerData()$logger_data[, 1], 1:500) diff --git a/tutorials/compboost_class.R b/tutorials/compboost_class.R index 04c84043..951a9d93 100644 --- a/tutorials/compboost_class.R +++ b/tutorials/compboost_class.R @@ -89,5 +89,9 @@ cboost$train(trace = TRUE) # Get vector selected baselearner: cboost$getSelectedBaselearner() -# cboost$getModelFrame() + +# Get estimated parameter: +cboost$getEstimatedParameter() + +# Get logger data: cboost$getLoggerData() diff --git a/tutorials/compboost_vs_mboost.R b/tutorials/compboost_vs_mboost.R index 2cfaeaa1..b1b36d2d 100644 --- a/tutorials/compboost_vs_mboost.R +++ b/tutorials/compboost_vs_mboost.R @@ -78,9 +78,11 @@ cboost$train(FALSE) # Get vector selected baselearner: cboost$getSelectedBaselearner() -# cboost$GetModelFrame() + +# Get logger data: cboost$getLoggerData() +# Get parameter estimator: # Do the same with mboost: # ------------------------ @@ -113,7 +115,12 @@ all.equal(mod$xselect(), cboost.xselect) # ------------------------------------ all.equal(predict(mod), cboost$getPrediction()) -# cboost$GetParameter() + +# Check if parameter are the same: +# -------------------------------- + +mod$coef() +cboost$getEstimatedParameter() # Benchmark: # ----------