| 40 | num_outputs_(params.num_outputs()) {} |
| 41 | |
| 42 | void GrowStats::AddSplit(const decision_trees::BinaryNode& split, |
| 43 | const std::unique_ptr<TensorDataSet>& input_data, |
| 44 | const InputTarget* target, int example) { |
| 45 | // It's possible that the split collection calls AddSplit, but we actually |
| 46 | // have all the splits we need and are just waiting for them to be fully |
| 47 | // initialized. |
| 48 | if (splits_.size() < num_splits_to_consider_) { |
| 49 | splits_.push_back(split); |
| 50 | evaluators_.emplace_back( |
| 51 | CreateBinaryDecisionNodeEvaluator(split, LEFT_INDEX, RIGHT_INDEX)); |
| 52 | AddSplitStats(target, example); |
| 53 | } |
| 54 | |
| 55 | if (input_data != nullptr && target != nullptr && |
| 56 | params_.initialize_average_splits()) { |
| 57 | AdditionalInitializationExample(input_data, target, example); |
| 58 | } |
| 59 | } |
| 60 | |
| 61 | void GrowStats::RemoveSplit(int split_num) { |
| 62 | splits_.erase(splits_.begin() + split_num); |