| 761 | } |
| 762 | |
| 763 | void GBDT::ResetTrainingData(const Dataset* train_data, const ObjectiveFunction* objective_function, |
| 764 | const std::vector<const Metric*>& training_metrics) { |
| 765 | if (train_data != train_data_ && !train_data_->CheckAlign(*train_data)) { |
| 766 | Log::Fatal("Cannot reset training data, since new training data has different bin mappers"); |
| 767 | } |
| 768 | |
| 769 | objective_function_ = objective_function; |
| 770 | if (objective_function_ != nullptr) { |
| 771 | is_constant_hessian_ = objective_function_->IsConstantHessian(); |
| 772 | CHECK(num_tree_per_iteration_ == objective_function_->NumModelPerIteration()); |
| 773 | } else { |
| 774 | is_constant_hessian_ = false; |
| 775 | } |
| 776 | |
| 777 | // push training metrics |
| 778 | training_metrics_.clear(); |
| 779 | for (const auto& metric : training_metrics) { |
| 780 | training_metrics_.push_back(metric); |
| 781 | } |
| 782 | training_metrics_.shrink_to_fit(); |
| 783 | |
| 784 | if (train_data != train_data_) { |
| 785 | train_data_ = train_data; |
| 786 | // not same training data, need reset score and others |
| 787 | // create score tracker |
| 788 | train_score_updater_.reset(new ScoreUpdater(train_data_, num_tree_per_iteration_)); |
| 789 | |
| 790 | // update score |
| 791 | for (int i = 0; i < iter_; ++i) { |
| 792 | for (int cur_tree_id = 0; cur_tree_id < num_tree_per_iteration_; ++cur_tree_id) { |
| 793 | auto curr_tree = (i + num_init_iteration_) * num_tree_per_iteration_ + cur_tree_id; |
| 794 | train_score_updater_->AddScore(models_[curr_tree].get(), cur_tree_id); |
| 795 | } |
| 796 | } |
| 797 | |
| 798 | num_data_ = train_data_->num_data(); |
| 799 | |
| 800 | // create buffer for gradients and hessians |
| 801 | if (objective_function_ != nullptr) { |
| 802 | size_t total_size = static_cast<size_t>(num_data_) * num_tree_per_iteration_; |
| 803 | gradients_.resize(total_size); |
| 804 | hessians_.resize(total_size); |
| 805 | } |
| 806 | |
| 807 | max_feature_idx_ = train_data_->num_total_features() - 1; |
| 808 | label_idx_ = train_data_->label_idx(); |
| 809 | feature_names_ = train_data_->feature_names(); |
| 810 | feature_infos_ = train_data_->feature_infos(); |
| 811 | |
| 812 | tree_learner_->ResetTrainingData(train_data); |
| 813 | ResetBaggingConfig(config_.get(), true); |
| 814 | } |
| 815 | } |
| 816 | |
| 817 | void GBDT::ResetConfig(const Config* config) { |
| 818 | auto new_config = std::unique_ptr<Config>(new Config(*config)); |
no test coverage detected