From 983cb0b3743939c4606f00c9eaf09aa86ebfc338 Mon Sep 17 00:00:00 2001 From: Philip Hyunsu Cho Date: Sat, 18 Aug 2018 11:39:20 -0700 Subject: [PATCH] Add option to disable default metric (#3606) --- demo/guide-python/custom_objective.py | 4 ++-- doc/parameter.rst | 4 ++++ src/learner.cc | 7 ++++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/demo/guide-python/custom_objective.py b/demo/guide-python/custom_objective.py index 349b3081d..3cc73c0e3 100755 --- a/demo/guide-python/custom_objective.py +++ b/demo/guide-python/custom_objective.py @@ -33,9 +33,9 @@ def logregobj(preds, dtrain): # Take this in mind when you use the customization, and maybe you need write customized evaluation function def evalerror(preds, dtrain): labels = dtrain.get_label() - # return a pair metric_name, result. The metric name must not contain a colon (:) + # return a pair metric_name, result. The metric name must not contain a colon (:) or a space # since preds are margin(before logistic transformation, cutoff at 0) - return 'error', float(sum(labels != (preds > 0.0))) / len(labels) + return 'my-error', float(sum(labels != (preds > 0.0))) / len(labels) # training with customized objective, we can also do step by step training # simply look at xgboost.py's implementation of train diff --git a/doc/parameter.rst b/doc/parameter.rst index 635d60cb6..8613b2159 100644 --- a/doc/parameter.rst +++ b/doc/parameter.rst @@ -31,6 +31,10 @@ General Parameters - Number of parallel threads used to run XGBoost +* ``disable_default_eval_metric`` [default=0] + + - Flag to disable default metric. Set to >0 to disable. + * ``num_pbuffer`` [set automatically by XGBoost, no need to be set by user] - Size of prediction buffer, normally set to number of training instances. The buffers are used to save the prediction results of last boosting step. diff --git a/src/learner.cc b/src/learner.cc index 57c361b6f..a1d3b469e 100644 --- a/src/learner.cc +++ b/src/learner.cc @@ -92,6 +92,8 @@ struct LearnerTrainParam : public dmlc::Parameter { int nthread; // flag to print out detailed breakdown of runtime int debug_verbose; + // flag to disable default metric + int disable_default_eval_metric; // declare parameters DMLC_DECLARE_PARAMETER(LearnerTrainParam) { DMLC_DECLARE_FIELD(seed).set_default(0).describe( @@ -128,6 +130,9 @@ struct LearnerTrainParam : public dmlc::Parameter { .set_lower_bound(0) .set_default(0) .describe("flag to print out detailed breakdown of runtime"); + DMLC_DECLARE_FIELD(disable_default_eval_metric) + .set_default(0) + .describe("flag to disable default metric. Set to >0 to disable"); } }; @@ -403,7 +408,7 @@ class LearnerImpl : public Learner { monitor_.Start("EvalOneIter"); std::ostringstream os; os << '[' << iter << ']' << std::setiosflags(std::ios::fixed); - if (metrics_.size() == 0) { + if (metrics_.size() == 0 && tparam_.disable_default_eval_metric <= 0) { metrics_.emplace_back(Metric::Create(obj_->DefaultEvalMetric())); } for (size_t i = 0; i < data_sets.size(); ++i) {