| 726 | // ---- private functions ---- |
| 727 | |
| 728 | void DatasetLoader::CheckDataset(const Dataset* dataset) { |
| 729 | if (dataset->num_data_ <= 0) { |
| 730 | Log::Fatal("Data file %s is empty", dataset->data_filename_.c_str()); |
| 731 | } |
| 732 | if (dataset->feature_names_.size() != static_cast<size_t>(dataset->num_total_features_)) { |
| 733 | Log::Fatal("Size of feature name error, should be %d, got %d", dataset->num_total_features_, |
| 734 | static_cast<int>(dataset->feature_names_.size())); |
| 735 | } |
| 736 | bool is_feature_order_by_group = true; |
| 737 | int last_group = -1; |
| 738 | int last_sub_feature = -1; |
| 739 | // if features are ordered, not need to use hist_buf |
| 740 | for (int i = 0; i < dataset->num_features_; ++i) { |
| 741 | int group = dataset->feature2group_[i]; |
| 742 | int sub_feature = dataset->feature2subfeature_[i]; |
| 743 | if (group < last_group) { |
| 744 | is_feature_order_by_group = false; |
| 745 | } else if (group == last_group) { |
| 746 | if (sub_feature <= last_sub_feature) { |
| 747 | is_feature_order_by_group = false; |
| 748 | break; |
| 749 | } |
| 750 | } |
| 751 | last_group = group; |
| 752 | last_sub_feature = sub_feature; |
| 753 | } |
| 754 | if (!is_feature_order_by_group) { |
| 755 | Log::Fatal("Features in dataset should be ordered by group"); |
| 756 | } |
| 757 | } |
| 758 | |
| 759 | std::vector<std::string> DatasetLoader::LoadTextDataToMemory(const char* filename, const Metadata& metadata, |
| 760 | int rank, int num_machines, int* num_global_data, |