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

Method CalDCG

src/metric/dcg_calculator.cpp:129–152  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

127}
128
129void DCGCalculator::CalDCG(const std::vector<data_size_t>& ks, const label_t* label,
130 const double * score, data_size_t num_data, std::vector<double>* out) {
131 // get sorted indices by score
132 std::vector<data_size_t> sorted_idx(num_data);
133 for (data_size_t i = 0; i < num_data; ++i) {
134 sorted_idx[i] = i;
135 }
136 std::stable_sort(sorted_idx.begin(), sorted_idx.end(),
137 [score](data_size_t a, data_size_t b) {return score[a] > score[b]; });
138
139 double cur_result = 0.0f;
140 data_size_t cur_left = 0;
141 // calculate multi dcg by one pass
142 for (size_t i = 0; i < ks.size(); ++i) {
143 data_size_t cur_k = ks[i];
144 if (cur_k > num_data) { cur_k = num_data; }
145 for (data_size_t j = cur_left; j < cur_k; ++j) {
146 data_size_t idx = sorted_idx[j];
147 cur_result += label_gain_[static_cast<int>(label[idx])] * discount_[j];
148 }
149 (*out)[i] = cur_result;
150 cur_left = cur_k;
151 }
152}
153
154void DCGCalculator::CheckLabel(const label_t* label, data_size_t num_data) {
155 for (data_size_t i = 0; i < num_data; ++i) {

Callers

nothing calls this directly

Calls 4

stable_sortFunction · 0.85
beginMethod · 0.45
endMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected