Docs
Loading...
Searching...
No Matches
Natarajan_likelihood.hpp
Go to the documentation of this file.
1
5
6#pragma once
7
9#include <vector>
10
24private:
25 // Precomputed values for efficiency
26 const double lgamma_delta1;
27 const double log_beta_alpha;
28 const double lgamma_delta2;
29 const double log_gamma_zeta;
30 std::vector<double> lgamma_zeta_mt_cache;
31 std::vector<double> lgamma_alpha_mh_cache;
32
33 std::vector<double> log_D_data;
34 const int D_cols;
35
44 double compute_cohesion(int point_index, int cluster_index,
45 const Eigen::Ref<const Eigen::VectorXi> &cls_ass_k,
46 int n_k) const;
47
56 double compute_repulsion(int point_index, int cluster_index,
57 const Eigen::Ref<const Eigen::VectorXi> &cls_ass_k,
58 int n_k) const;
59
60public:
71 Natarajan_likelihood(const Data &data, const Params &param)
72 : Likelihood(data, param), lgamma_delta1(lgamma(params.delta1)),
73 log_beta_alpha(log(params.beta) * params.alpha - lgamma(params.alpha)),
74 lgamma_delta2(lgamma(params.delta2)),
75 log_gamma_zeta(log(params.gamma) * params.zeta - lgamma(params.zeta)),
76 D_cols(params.D.cols()) {
77 // Precompute log distances manually
78 const int n = params.D.rows() * params.D.cols();
79 log_D_data.resize(n);
80
81 // Log distance precomputation
82 const double *D_ptr = params.D.data();
83 for (int i = 0; i < n; ++i) {
84 log_D_data[i] = std::log(D_ptr[i]);
85 }
86
87 // Cache lgamma values for efficiency
88 lgamma_alpha_mh_cache.resize(data.get_n() + 1, 0.0);
89 lgamma_zeta_mt_cache.resize(data.get_n() + 1, 0.0);
90
91 for (int val = 0; val <= data.get_n(); ++val) {
92 lgamma_alpha_mh_cache[val] = lgamma(params.alpha + params.delta1 * val);
93 lgamma_zeta_mt_cache[val] = lgamma(params.zeta + params.delta2 * val);
94 }
95
96 }
97
106 double cluster_loglikelihood(int cluster_index) const override final;
107
119 int cluster_index,
120 const Eigen::Ref<const Eigen::VectorXi> &cls_ass_k) const override final __attribute__((hot));
121
132 double point_loglikelihood_cond(int point_index, int cluster_index) const override final __attribute__((hot));
133};
Abstract base class for likelihood computation in clustering models.
Manages distance matrices and cluster allocations for points.
Definition Data.hpp:27
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
Natarajan_likelihood(const Data &data, const Params &param)
Constructs a Likelihood object with precomputation.
Definition Natarajan_likelihood.hpp:71
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.cpp:138
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.cpp:94
const double log_gamma_zeta
Precomputed log(gamma) * zeta - lgamma(zeta).
Definition Natarajan_likelihood.hpp:29
const double log_beta_alpha
Precomputed log(beta) * alpha - lgamma(alpha).
Definition Natarajan_likelihood.hpp:27
double cluster_loglikelihood(int cluster_index) const override final
Computes the full log-likelihood for a cluster.
Definition Natarajan_likelihood.cpp:9
std::vector< double > lgamma_zeta_mt_cache
Cache for lgamma(zeta_mt) values.
Definition Natarajan_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 Natarajan_likelihood.cpp:106
const int D_cols
Number of columns in distance matrix.
Definition Natarajan_likelihood.hpp:34
const double lgamma_delta1
Precomputed lgamma(delta1) for cohesion.
Definition Natarajan_likelihood.hpp:26
std::vector< double > log_D_data
Precomputed log distance matrix (flattened).
Definition Natarajan_likelihood.hpp:33
std::vector< double > lgamma_alpha_mh_cache
Cache for lgamma(alpha_mh) values.
Definition Natarajan_likelihood.hpp:31
const double lgamma_delta2
Precomputed lgamma(delta2) for repulsion.
Definition Natarajan_likelihood.hpp:28
Structure containing all parameters needed for the NGGP (Normalized Generalized Gamma Process) and DP...
Definition Params.hpp:35