| 991 | } |
| 992 | |
| 993 | void Dataset::FixHistogram(int feature_idx, double sum_gradient, double sum_hessian, data_size_t num_data, |
| 994 | HistogramBinEntry* data) const { |
| 995 | const int group = feature2group_[feature_idx]; |
| 996 | const int sub_feature = feature2subfeature_[feature_idx]; |
| 997 | const BinMapper* bin_mapper = feature_groups_[group]->bin_mappers_[sub_feature].get(); |
| 998 | const int default_bin = bin_mapper->GetDefaultBin(); |
| 999 | if (default_bin > 0) { |
| 1000 | const int num_bin = bin_mapper->num_bin(); |
| 1001 | data[default_bin].sum_gradients = sum_gradient; |
| 1002 | data[default_bin].sum_hessians = sum_hessian; |
| 1003 | data[default_bin].cnt = num_data; |
| 1004 | for (int i = 0; i < num_bin; ++i) { |
| 1005 | if (i != default_bin) { |
| 1006 | data[default_bin].sum_gradients -= data[i].sum_gradients; |
| 1007 | data[default_bin].sum_hessians -= data[i].sum_hessians; |
| 1008 | data[default_bin].cnt -= data[i].cnt; |
| 1009 | } |
| 1010 | } |
| 1011 | } |
| 1012 | } |
| 1013 | |
| 1014 | template<typename T> |
| 1015 | void PushVector(std::vector<T>* dest, const std::vector<T>& src) { |
no test coverage detected