| 548 | } |
| 549 | |
| 550 | void GBDT::RollbackOneIter() { |
| 551 | if (iter_ <= 0) { return; } |
| 552 | // reset score |
| 553 | for (int cur_tree_id = 0; cur_tree_id < num_tree_per_iteration_; ++cur_tree_id) { |
| 554 | auto curr_tree = models_.size() - num_tree_per_iteration_ + cur_tree_id; |
| 555 | models_[curr_tree]->Shrinkage(-1.0); |
| 556 | train_score_updater_->AddScore(models_[curr_tree].get(), cur_tree_id); |
| 557 | for (auto& score_updater : valid_score_updater_) { |
| 558 | score_updater->AddScore(models_[curr_tree].get(), cur_tree_id); |
| 559 | } |
| 560 | } |
| 561 | // remove model |
| 562 | for (int cur_tree_id = 0; cur_tree_id < num_tree_per_iteration_; ++cur_tree_id) { |
| 563 | models_.pop_back(); |
| 564 | } |
| 565 | --iter_; |
| 566 | } |
| 567 | |
| 568 | bool GBDT::EvalAndCheckEarlyStopping() { |
| 569 | bool is_met_early_stopping = false; |