33 ~bs() {
delete pred_vec; }
46 unsigned int counter = 0;
47 int current_label = 1, init_label = 1;
49 bool majority_found =
false;
50 bool multivote_detected =
false;
51 auto pred_vec_sz = pred_vec.size();
52 int* pred_vec_int =
new int[pred_vec_sz];
54 for (
unsigned int i = 0; i < pred_vec_sz; i++)
56 pred_vec_int[i] = (int)floor(
59 if (!multivote_detected)
63 init_label = pred_vec_int[i];
64 current_label = pred_vec_int[i];
66 else if (init_label != current_label && pred_vec_int[i] != current_label && pred_vec_int[i] != init_label)
67 multivote_detected =
true;
73 current_label = pred_vec_int[i];
77 if (pred_vec_int[i] == current_label)
86 if (counter > 0 && multivote_detected)
89 for (
unsigned int i = 0; i < pred_vec.size(); i++)
90 if (pred_vec_int[i] == current_label)
95 if (counter * 2 > pred_vec.size())
96 majority_found =
true;
99 if (multivote_detected && !majority_found)
101 std::sort(pred_vec_int, pred_vec_int + pred_vec.size());
102 int tmp_label = pred_vec_int[0];
104 for (
unsigned int i = 1, temp_count = 1; i < pred_vec.size(); i++)
106 if (tmp_label == pred_vec_int[i])
110 if (temp_count > counter)
112 current_label = tmp_label;
113 counter = temp_count;
115 tmp_label = pred_vec_int[i];
126 delete[] pred_vec_int;
140 std::stringstream ss;
141 ss << std::fixed << res;
143 ss << std::fixed <<
' ' << lb <<
' ' << ub <<
'\n';
144 ssize_t len = ss.str().size();
147 std::cerr <<
"write error: " << strerror(errno) << std::endl;
177 template <
bool is_learn>
183 float weight_temp = ec.
weight;
185 std::stringstream outputStringStream;
188 for (
size_t i = 1; i <= d.
B; i++)
193 base.
learn(ec, i - 1);
202 outputStringStream <<
' ';
233 auto data = scoped_calloc_or_throw<bs>();
234 std::string type_string(
"mean");
236 new_options.
add(
make_option(
"bootstrap", data->B).keep().help(
"k-way bootstrap by online importance resampling"))
237 .
add(
make_option(
"bs_type", type_string).keep().help(
"prediction type {mean,vote}"));
248 if (type_string ==
"mean")
250 else if (type_string ==
"vote")
254 std::cerr <<
"warning: bs_type must be in {'mean','vote'}; resetting to mean." << std::endl;
261 data->pred_vec =
new std::vector<double>();
262 data->pred_vec->reserve(data->B);
void predict(E &ec, size_t i=0)
uint32_t weight_gen(std::shared_ptr< rand_state > &state)
void accumulate(vw &all, parameters &weights, size_t offset)
static ssize_t write_file_or_socket(int f, const void *buf, size_t nbytes)
v_array< int > final_prediction_sink
base_learner * make_base(learner< T, E > &base)
int print_tag(std::stringstream &ss, v_array< char > tag)
std::shared_ptr< rand_state > _random_state
base_learner * bs_setup(options_i &options, vw &all)
virtual void add_and_parse(const option_group_definition &group)=0
void predict_or_learn(bs &d, single_learner &base, example &ec)
void output_example(vw &all, bs &d, example &ec)
std::shared_ptr< rand_state > get_random_state()
single_learner * as_singleline(learner< T, E > *l)
void print_update(vw &all, bool is_test, example &ec, multi_ex *ec_seq, bool action_scores)
void set_finish_example(void(*f)(vw &all, T &, E &))
virtual float getLoss(shared_data *, float prediction, float label)=0
learner< T, E > & init_learner(free_ptr< T > &dat, L *base, void(*learn)(T &, L &, E &), void(*predict)(T &, L &, E &), size_t ws, prediction_type::prediction_type_t pred_type)
virtual bool was_supplied(const std::string &key)=0
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)
option_group_definition & add(T &&op)
int add(svm_params ¶ms, svm_example *fec)
typed_option< T > make_option(std::string name, T &location)
void print_result(int f, float res, v_array< char > tag, float lb, float ub)
void finish_example(vw &all, bs &d, example &ec)
void bs_predict_vote(example &ec, std::vector< double > &pred_vec)
LEARNER::base_learner * setup_base(options_i &options, vw &all)
void bs_predict_mean(vw &all, example &ec, std::vector< double > &pred_vec)
void learn(E &ec, size_t i=0)
std::vector< double > * pred_vec