| 456 | } |
| 457 | |
| 458 | void Dataset::CreateValid(const Dataset* dataset) { |
| 459 | feature_groups_.clear(); |
| 460 | num_features_ = dataset->num_features_; |
| 461 | num_groups_ = num_features_; |
| 462 | sparse_threshold_ = dataset->sparse_threshold_; |
| 463 | bool is_enable_sparse = true; |
| 464 | feature2group_.clear(); |
| 465 | feature2subfeature_.clear(); |
| 466 | // copy feature bin mapper data |
| 467 | for (int i = 0; i < num_features_; ++i) { |
| 468 | std::vector<std::unique_ptr<BinMapper>> bin_mappers; |
| 469 | bin_mappers.emplace_back(new BinMapper(*(dataset->FeatureBinMapper(i)))); |
| 470 | feature_groups_.emplace_back(new FeatureGroup( |
| 471 | 1, |
| 472 | &bin_mappers, |
| 473 | num_data_, |
| 474 | sparse_threshold_, |
| 475 | is_enable_sparse)); |
| 476 | feature2group_.push_back(i); |
| 477 | feature2subfeature_.push_back(0); |
| 478 | } |
| 479 | |
| 480 | feature_groups_.shrink_to_fit(); |
| 481 | used_feature_map_ = dataset->used_feature_map_; |
| 482 | num_total_features_ = dataset->num_total_features_; |
| 483 | feature_names_ = dataset->feature_names_; |
| 484 | label_idx_ = dataset->label_idx_; |
| 485 | real_feature_idx_ = dataset->real_feature_idx_; |
| 486 | group_bin_boundaries_.clear(); |
| 487 | uint64_t num_total_bin = 0; |
| 488 | group_bin_boundaries_.push_back(num_total_bin); |
| 489 | for (int i = 0; i < num_groups_; ++i) { |
| 490 | num_total_bin += feature_groups_[i]->num_total_bin_; |
| 491 | group_bin_boundaries_.push_back(num_total_bin); |
| 492 | } |
| 493 | int last_group = 0; |
| 494 | group_feature_start_.reserve(num_groups_); |
| 495 | group_feature_cnt_.reserve(num_groups_); |
| 496 | group_feature_start_.push_back(0); |
| 497 | group_feature_cnt_.push_back(1); |
| 498 | for (int i = 1; i < num_features_; ++i) { |
| 499 | const int group = feature2group_[i]; |
| 500 | if (group == last_group) { |
| 501 | group_feature_cnt_.back() = group_feature_cnt_.back() + 1; |
| 502 | } else { |
| 503 | group_feature_start_.push_back(i); |
| 504 | group_feature_cnt_.push_back(1); |
| 505 | last_group = group; |
| 506 | } |
| 507 | } |
| 508 | monotone_types_ = dataset->monotone_types_; |
| 509 | feature_penalty_ = dataset->feature_penalty_; |
| 510 | forced_bin_bounds_ = dataset->forced_bin_bounds_; |
| 511 | } |
| 512 | |
| 513 | void Dataset::ReSize(data_size_t num_data) { |
| 514 | if (num_data_ != num_data) { |
no test coverage detected