| 445 | } |
| 446 | |
| 447 | void DenseClassificationGrowStats::PackToProto(FertileSlot* slot) const { |
| 448 | auto* slot_stats = slot->mutable_post_init_leaf_stats(); |
| 449 | slot_stats->set_weight_sum(weight_sum_); |
| 450 | |
| 451 | auto* class_stats = slot->mutable_post_init_leaf_stats() |
| 452 | ->mutable_classification() |
| 453 | ->mutable_dense_counts(); |
| 454 | for (int i = 0; i < num_outputs_; ++i) { |
| 455 | class_stats->add_value()->set_float_value(total_counts_[i]); |
| 456 | } |
| 457 | |
| 458 | for (int split_num = 0; split_num < num_splits(); ++split_num) { |
| 459 | auto* cand = slot->add_candidates(); |
| 460 | *cand->mutable_split() = splits_[split_num]; |
| 461 | auto* left_stats = cand->mutable_left_stats() |
| 462 | ->mutable_classification() |
| 463 | ->mutable_dense_counts(); |
| 464 | for (int i = 0; i < num_outputs_; ++i) { |
| 465 | left_stats->add_value()->set_float_value(left_count(split_num, i)); |
| 466 | } |
| 467 | } |
| 468 | } |
| 469 | |
| 470 | float DenseClassificationGrowStats::GiniScore(int split, float* left_sum, |
| 471 | float* right_sum) const { |