Docs
Loading...
Searching...
No Matches
Natarajan_likelihood_summaryStats.hpp
Go to the documentation of this file.
1
5
6#pragma once
7
11#include <vector>
12
30private:
33 // Precomputed values for efficiency
34 const double lgamma_delta1;
35 const double
37 const double lgamma_delta2;
38 const double log_gamma_zeta;
40 std::vector<double>
42
43 std::vector<double>
45 const int D_cols;
46
55 double compute_cohesion(int point_index, int cluster_index,
56 const Eigen::Ref<const Eigen::VectorXi> &cls_ass_k,
57 int n_k) const;
58
67 double compute_repulsion(int point_index, int cluster_index,
68 const Eigen::Ref<const Eigen::VectorXi> &cls_ass_k,
69 int n_k) const;
70
71public:
85 const utils_params &utils)
87 lgamma_delta1(lgamma(params.delta1)),
88 log_beta_alpha(log(params.beta) * params.alpha - lgamma(params.alpha)),
89 lgamma_delta2(lgamma(params.delta2)),
90 log_gamma_zeta(log(params.gamma) * params.zeta - lgamma(params.zeta)),
91 D_cols(utils.D.cols()) {
92 // Precompute log distances manually
93 const int n = utils.D.rows() * utils.D.cols();
94 log_D_data.resize(n);
95
96 // Log distance precomputation
97 const double *D_ptr = utils.D.data();
98 for (int i = 0; i < n; ++i) {
99 log_D_data[i] = std::log(std::max(D_ptr[i], 1e-12));
100 }
101
102 // Cache lgamma values for efficiency
103 lgamma_alpha_mh_cache.resize(data.get_n() + 1, 0.0);
104
105 for (int val = 0; val <= data.get_n(); ++val) {
106 lgamma_alpha_mh_cache[val] = lgamma(params.alpha + params.delta1 * val);
107 }
108 lgamma_zeta_mt_cache = lgamma(params.zeta + params.delta2);
109 }
110
119 double cluster_loglikelihood(int cluster_index) const override final;
120
132 int cluster_index,
133 const Eigen::Ref<const Eigen::VectorXi> &cls_ass_k) const override final
134 __attribute__((hot));
135
142 double clusters_loglikelihood(int c1, int c2) const override final;
143
154 double point_loglikelihood_cond(int point_index,
155 int cluster_index) const override final
156 __attribute__((hot));
157
164 double pairwise_repulsion(int cluster_1, int cluster_2) const;
165};
Abstract base class for likelihood computation in clustering models.
Parameter management for the likelihood taken from Natarajan et al. (2023) "Cohesion and Repulsion in...
Manages distance matrices and cluster allocations for points.
Definition Data.hpp:26
const Data & data
Reference to Data object with distances and allocations.
Definition Likelihood.hpp:28
Likelihood(const Data &data)
Definition Likelihood.hpp:31
double compute_cohesion(int point_index, int cluster_index, const Eigen::Ref< const Eigen::VectorXi > &cls_ass_k, int n_k) const
Computes the cohesion component of the log-likelihood.
Definition Natarajan_likelihood_summaryStats.cpp:106
const double lgamma_delta2
Precomputed lgamma(delta2) for repulsion.
Definition Natarajan_likelihood_summaryStats.hpp:37
std::vector< double > log_D_data
Precomputed log distance matrix (flattened).
Definition Natarajan_likelihood_summaryStats.hpp:44
double point_loglikelihood_cond(int point_index, int cluster_index) const override final __attribute__((hot))
Computes the conditional log-likelihood of a point given a cluster.
Definition Natarajan_likelihood_summaryStats.cpp:95
const utils_params & utils
Reference to utility parameters.
Definition Natarajan_likelihood_summaryStats.hpp:32
Natarajan_likelihood_summaryStats(const Data &data, const Natarajan_params &params, const utils_params &utils)
Constructs a Likelihood object with precomputation.
Definition Natarajan_likelihood_summaryStats.hpp:83
double compute_repulsion(int point_index, int cluster_index, const Eigen::Ref< const Eigen::VectorXi > &cls_ass_k, int n_k) const
Computes the repulsion component of the log-likelihood.
Definition Natarajan_likelihood_summaryStats.cpp:138
double lgamma_zeta_mt_cache
Precomputed lgamma(zeta_mt) for repulsion.
Definition Natarajan_likelihood_summaryStats.hpp:39
double clusters_loglikelihood(int c1, int c2) const override final
Computes the joint log-likelihood for two clusters accounting for pairwise repulsion.
Definition Natarajan_likelihood_summaryStats.cpp:219
const double log_beta_alpha
Precomputed log(beta) * alpha - lgamma(alpha).
Definition Natarajan_likelihood_summaryStats.hpp:36
const double lgamma_delta1
Precomputed lgamma(delta1) for cohesion.
Definition Natarajan_likelihood_summaryStats.hpp:34
const Natarajan_params & params
Reference to model parameters.
Definition Natarajan_likelihood_summaryStats.hpp:31
std::vector< double > lgamma_alpha_mh_cache
Cache for lgamma(alpha_mh) values.
Definition Natarajan_likelihood_summaryStats.hpp:41
const double log_gamma_zeta
Precomputed log(gamma) * zeta - lgamma(zeta).
Definition Natarajan_likelihood_summaryStats.hpp:38
const int D_cols
Number of columns in distance matrix.
Definition Natarajan_likelihood_summaryStats.hpp:45
double cluster_loglikelihood(int cluster_index) const override final
Computes the full log-likelihood for a cluster.
Definition Natarajan_likelihood_summaryStats.cpp:9
double pairwise_repulsion(int cluster_1, int cluster_2) const
Computes the pairwise repulsion between two clusters.
Definition Natarajan_likelihood_summaryStats.cpp:182
Parameter struct for the Natarajan likelihood model.
Definition Natarajan-params.hpp:18
Parameter struct for utility parameters and data structures.
Definition utils-params.hpp:17
Parameter management for useful parameters and data structures.