Docs
Loading...
Searching...
No Matches
Gamma_likelihood.hpp
Go to the documentation of this file.
1
5
6#pragma once
7
9#include <vector>
10
22private:
23 // Precomputed values for efficiency
24 const double lgamma_delta1;
25 const double log_beta_alpha;
26 std::vector<double> lgamma_alpha_mh_cache;
27
28 std::vector<double> log_D_data;
29 const int D_cols;
30
39 double compute_cohesion(int point_index, int cluster_index,
40 const Eigen::Ref<const Eigen::VectorXi> &cls_ass_k,
41 int n_k) const;
42
43public:
54 Gamma_likelihood(const Data &data, const Params &param)
55 : Likelihood(data, param), lgamma_delta1(lgamma(params.delta1)),
56 log_beta_alpha(log(params.beta) * params.alpha - lgamma(params.alpha)),
57 D_cols(params.D.cols()) {
58 // Precompute log distances manually
59 const int n = params.D.rows() * params.D.cols();
60 log_D_data.resize(n);
61
62 // Log distance precomputation
63 const double *D_ptr = params.D.data();
64 for (int i = 0; i < n; ++i) {
65 log_D_data[i] = std::log(D_ptr[i]);
66 }
67
68 // Cache lgamma values for efficiency
69 lgamma_alpha_mh_cache.resize(data.get_n() + 1, 0.0);
70
71 for (int val = 0; val <= data.get_n(); ++val) {
72 lgamma_alpha_mh_cache[val] = lgamma(params.alpha + params.delta1 * val);
73 }
74
75 }
76
85 double cluster_loglikelihood(int cluster_index) const override final;
86
98 int cluster_index,
99 const Eigen::Ref<const Eigen::VectorXi> &cls_ass_k) const override final __attribute__((hot));
100
111 double point_loglikelihood_cond(int point_index, int cluster_index) const override final __attribute__((hot));
112};
Abstract base class for likelihood computation in clustering models.
Manages distance matrices and cluster allocations for points.
Definition Data.hpp:27
const double log_beta_alpha
Precomputed log(beta) * alpha - lgamma(alpha).
Definition Gamma_likelihood.hpp:25
const double lgamma_delta1
Precomputed lgamma(delta1) for cohesion.
Definition Gamma_likelihood.hpp:24
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:69
std::vector< double > log_D_data
Precomputed log distance matrix (flattened).
Definition Gamma_likelihood.hpp:28
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:26
const int D_cols
Number of columns in distance matrix.
Definition Gamma_likelihood.hpp:29
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:60
Gamma_likelihood(const Data &data, const Params &param)
Constructs a Likelihood object with precomputation.
Definition Gamma_likelihood.hpp:54
Likelihood(const Data &data, const Params &param)
Definition Likelihood.hpp:33
const Data & data
Reference to Data object with distances and allocations.
Definition Likelihood.hpp:29
const Params & params
Reference to model parameters.
Definition Likelihood.hpp:30
Structure containing all parameters needed for the NGGP (Normalized Generalized Gamma Process) and DP...
Definition Params.hpp:35