MCPcopy Create free account
hub / github.com/antmachineintelligence/mtgbmcode / BalancedBaggingHelper

Method BalancedBaggingHelper

src/boosting/gbdt.cpp:188–215  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

186}
187
188data_size_t GBDT::BalancedBaggingHelper(Random* cur_rand, data_size_t start, data_size_t cnt, data_size_t* buffer) {
189 if (cnt <= 0) {
190 return 0;
191 }
192 auto label_ptr = train_data_->metadata().label();
193 data_size_t cur_left_cnt = 0;
194 data_size_t cur_right_pos = cnt - 1;
195 // from right to left
196 auto right_buffer = buffer;
197 // random bagging, minimal unit is one record
198 for (data_size_t i = 0; i < cnt; ++i) {
199 bool is_pos = label_ptr[start + i] > 0;
200 bool is_in_bag = false;
201 if (is_pos) {
202 is_in_bag = cur_rand->NextFloat() < config_->pos_bagging_fraction;
203 } else {
204 is_in_bag = cur_rand->NextFloat() < config_->neg_bagging_fraction;
205 }
206 if (is_in_bag) {
207 buffer[cur_left_cnt++] = start + i;
208 } else {
209 right_buffer[cur_right_pos--] = start + i;
210 }
211 }
212 // reverse right buffer
213 std::reverse(buffer + cur_left_cnt, buffer + cnt);
214 return cur_left_cnt;
215}
216
217void GBDT::Bagging(int iter) {
218 // if need bagging

Callers

nothing calls this directly

Calls 3

reverseFunction · 0.85
labelMethod · 0.45
NextFloatMethod · 0.45

Tested by

no test coverage detected