24 double PosteriorShape(Eigen::VectorXd& residuals,
double a,
double b) {
25 data_size_t n = residuals.rows();
28 double PosteriorScale(Eigen::VectorXd& residuals,
double a,
double b) {
29 data_size_t n = residuals.rows();
30 double sum_sq_resid = 0.;
31 for (data_size_t i = 0; i < n; i++) {
32 sum_sq_resid += (residuals(i) * residuals(i));
34 return b + (0.5 * sum_sq_resid);
36 double PosteriorShape(Eigen::VectorXd& residuals, Eigen::VectorXd& weights,
double a,
double b) {
37 data_size_t n = residuals.rows();
40 double PosteriorScale(Eigen::VectorXd& residuals, Eigen::VectorXd& weights,
double a,
double b) {
41 data_size_t n = residuals.rows();
42 double sum_sq_resid = 0.;
43 for (data_size_t i = 0; i < n; i++) {
44 sum_sq_resid += (residuals(i) * residuals(i)) * weights(i);
46 return b + (0.5 * sum_sq_resid);
48 double SampleVarianceParameter(Eigen::VectorXd& residuals,
double a,
double b, std::mt19937& gen) {
49 double ig_shape = PosteriorShape(residuals, a, b);
50 double ig_scale = PosteriorScale(residuals, a, b);
51 return ig_sampler_.Sample(ig_shape, ig_scale, gen);
53 double SampleVarianceParameter(Eigen::VectorXd& residuals, Eigen::VectorXd& weights,
double a,
double b, std::mt19937& gen) {
54 double ig_shape = PosteriorShape(residuals, weights, a, b);
55 double ig_scale = PosteriorScale(residuals, weights, a, b);
56 return ig_sampler_.Sample(ig_shape, ig_scale, gen);
67 double PosteriorShape(
TreeEnsemble* ensemble,
double a,
double b) {
68 data_size_t num_leaves = ensemble->NumLeaves();
69 return (a/2.0) + (num_leaves/2.0);
71 double PosteriorScale(
TreeEnsemble* ensemble,
double a,
double b) {
72 double mu_sq = ensemble->SumLeafSquared();
73 return (b/2.0) + (mu_sq/2.0);
75 double SampleVarianceParameter(
TreeEnsemble* ensemble,
double a,
double b, std::mt19937& gen) {
76 double ig_shape = PosteriorShape(ensemble, a, b);
77 double ig_scale = PosteriorScale(ensemble, a, b);
78 return ig_sampler_.Sample(ig_shape, ig_scale, gen);