From 807a244517f0fbba572dbf2dd076378b8e283245 Mon Sep 17 00:00:00 2001 From: Christopher Cowden Date: Wed, 6 Nov 2019 00:57:22 -0600 Subject: [PATCH] Fix repeated split and 0 cover nodes (#5010) --- src/tree/updater_colmaker.cc | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/tree/updater_colmaker.cc b/src/tree/updater_colmaker.cc index d482e3784..853480d02 100644 --- a/src/tree/updater_colmaker.cc +++ b/src/tree/updater_colmaker.cc @@ -409,14 +409,26 @@ class ColMaker: public TreeUpdater { loss_chg = static_cast( spliteval_->ComputeSplitScore(nid, fid, c, e.stats) - snode_[nid].root_gain); - e.best.Update(loss_chg, fid, (fvalue + e.last_fvalue) * 0.5f, + bst_float proposed_split = (fvalue + e.last_fvalue) * 0.5f; + if ( proposed_split == fvalue ) { + e.best.Update(loss_chg, fid, e.last_fvalue, d_step == -1, c, e.stats); + } else { + e.best.Update(loss_chg, fid, proposed_split, + d_step == -1, c, e.stats); + } } else { loss_chg = static_cast( spliteval_->ComputeSplitScore(nid, fid, e.stats, c) - snode_[nid].root_gain); - e.best.Update(loss_chg, fid, (fvalue + e.last_fvalue) * 0.5f, + bst_float proposed_split = (fvalue + e.last_fvalue) * 0.5f; + if ( proposed_split == fvalue ) { + e.best.Update(loss_chg, fid, e.last_fvalue, d_step == -1, e.stats, c); + } else { + e.best.Update(loss_chg, fid, proposed_split, + d_step == -1, e.stats, c); + } } } }