26 namespace cb_explore_adf
33 std::sort(probs.
begin(), probs.
end(),
35 if (as1.
score > as2.score)
37 else if (as1.
score < as2.score)
40 if (scores[as1.
action] < scores[as2.action])
42 else if (scores[as1.
action] > scores[as2.action])
45 return as1.
action < as2.action;
50 if (preds.
size() == 0)
53 for (
size_t i = 1; i < preds.
size(); ++i)
54 if (preds[i].score == preds[0].score)
62 template <
typename ExploreType>
74 template <
typename... Args>
87 template <
typename ExploreType>
94 if (label_example !=
nullptr)
101 data.
explore.predict(base, examples);
103 if (label_example !=
nullptr)
110 template <
typename ExploreType>
115 if (label_example !=
nullptr)
119 data.
explore.learn(base, examples);
127 template <
typename ExploreType>
130 if (ec_seq.size() <= 0)
133 size_t num_features = 0;
137 auto& ec = *ec_seq[0];
140 for (
const auto&
example : ec_seq)
145 bool labeled_example =
true;
148 for (uint32_t i = 0; i < preds.
size(); i++)
151 loss += l * preds[i].score;
155 labeled_example =
false;
157 bool holdout_example = labeled_example;
158 for (
size_t i = 0; i < ec_seq.size(); i++) holdout_example &= ec_seq[i]->test_only;
160 all.
sd->
update(holdout_example, labeled_example, loss, ec.weight, num_features);
166 std::string outputString;
167 std::stringstream outputStringStream(outputString);
170 for (
size_t i = 0; i < costs.
size(); i++)
173 outputStringStream <<
' ';
174 outputStringStream << costs[i].action <<
':' << costs[i].partial_prediction;
182 template <
typename ExploreType>
185 if (ec_seq.size() > 0)
193 template <
typename ExploreType>
197 if (ec_seq.size() > 0)
static void learn(cb_explore_adf_base< ExploreType > &data, LEARNER::multi_learner &base, multi_ex &examples)
v_array< int > final_prediction_sink
example * test_adf_sequence(multi_ex &ec_seq)
float loss(cbify &data, uint32_t label, uint32_t final_prediction)
float get_cost_estimate(CB::cb_class *observation, uint32_t action, float offset=0.)
CB::cb_class get_observed_cost(multi_ex &examples)
size_t fill_tied(v_array< ACTION_SCORE::action_score > &preds)
void print_update(vw &all, bool is_test, example &ec, multi_ex *ec_seq, bool action_scores)
void global_print_newline(const v_array< int > &final_prediction_sink)
void output_example(vw &all, multi_ex &ec_seq)
void(* print_text)(int, std::string, v_array< char >)
void finish_example(vw &, example &)
void update(bool test_example, bool labeled_example, float loss, float weight, size_t num_features)
std::vector< example * > multi_ex
cb_explore_adf_base(Args &&... args)
static void finish_multiline_example(vw &all, cb_explore_adf_base< ExploreType > &data, multi_ex &ec_seq)
static void predict(cb_explore_adf_base< ExploreType > &data, LEARNER::multi_learner &base, multi_ex &examples)
void sort_action_probs(v_array< ACTION_SCORE::action_score > &probs, const std::vector< float > &scores)
void print_action_score(int f, v_array< action_score > &a_s, v_array< char > &tag)
void output_example_seq(vw &all, multi_ex &ec_seq)