Docs
Loading...
Searching...
No Matches
Gamma_likelihood.hpp
Go to the documentation of this file.
1
5
6#pragma once
7
11#include <vector>
12
25private:
28
29 // Precomputed values for efficiency
30 const double lgamma_delta1;
31 const double
33 std::vector<double>
35
36 std::vector<double>
38 const int D_cols;
39
48 double compute_cohesion(int point_index, int cluster_index,
49 const Eigen::Ref<const Eigen::VectorXi> &cls_ass_k,
50 int n_k) const;
51
52public:
65 const utils_params &utils)
67 lgamma_delta1(lgamma(params.delta1)),
68 log_beta_alpha(log(params.beta) * params.alpha - lgamma(params.alpha)),
69 D_cols(utils.D.cols()) {
70 // Precompute log distances manually
71 const int n = utils.D.rows() * utils.D.cols();
72 log_D_data.resize(n);
73
74 // Log distance precomputation
75 const double *D_ptr = utils.D.data();
76 for (int i = 0; i < n; ++i) {
77 log_D_data[i] = std::log(D_ptr[i]);
78 }
79
80 // Cache lgamma values for efficiency
81 lgamma_alpha_mh_cache.resize(data.get_n() + 1, 0.0);
82
83 for (int val = 0; val <= data.get_n(); ++val) {
84 lgamma_alpha_mh_cache[val] = lgamma(params.alpha + params.delta1 * val);
85 }
86 }
87
96 double cluster_loglikelihood(int cluster_index) const override final;
97
109 int cluster_index,
110 const Eigen::Ref<const Eigen::VectorXi> &cls_ass_k) const override final
111 __attribute__((hot));
112
123 double point_loglikelihood_cond(int point_index,
124 int cluster_index) const override final
125 __attribute__((hot));
126};
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 double log_beta_alpha
Precomputed log(beta) * alpha - lgamma(alpha).
Definition Gamma_likelihood.hpp:32
const double lgamma_delta1
Precomputed lgamma(delta1) for cohesion.
Definition Gamma_likelihood.hpp:30
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 Gamma_likelihood.cpp:71
std::vector< double > log_D_data
Precomputed log distance matrix (flattened).
Definition Gamma_likelihood.hpp:37
double cluster_loglikelihood(int cluster_index) const override final
Computes the full log-likelihood for a cluster.
Definition Gamma_likelihood.cpp:9
std::vector< double > lgamma_alpha_mh_cache
Cache for lgamma(alpha_mh) values.
Definition Gamma_likelihood.hpp:34
const utils_params & utils
Definition Gamma_likelihood.hpp:27
const int D_cols
Number of columns in distance matrix.
Definition Gamma_likelihood.hpp:38
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 Gamma_likelihood.cpp:61
const Natarajan_params & params
Definition Gamma_likelihood.hpp:26
Gamma_likelihood(const Data &data, const Natarajan_params &params, const utils_params &utils)
Constructs a Likelihood object with precomputation.
Definition Gamma_likelihood.hpp:64
const Data & data
Reference to Data object with distances and allocations.
Definition Likelihood.hpp:28
Likelihood(const Data &data)
Definition Likelihood.hpp:31
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.