70 std::vector<double> log_odd_probs = probs;
71 auto prob_to_log_odd = [](
double p) {
72 p = std::max(std::min(p, 1 - 1e-6), 1e-6);
73 return std::log(p / (1 - p));
75 auto log_odd_to_prob = [](
double log_odd_p) {
76 double tmp = std::exp(log_odd_p);
77 return tmp / (tmp + 1);
79 for (
auto& log_odd_prob : log_odd_probs) {
80 log_odd_prob = prob_to_log_odd(log_odd_prob);
82 double log_odd_probs_sum =
83 std::accumulate(log_odd_probs.begin(), log_odd_probs.end(), 0.0);
84 return log_odd_to_prob(log_odd_probs_sum);