1 #ifndef VONMISESDISTRIBUTION_HPP 2 #define VONMISESDISTRIBUTION_HPP 12 #include <unsupported/Eigen/NonLinearOptimization> 13 #include <boost/math/special_functions/bessel.hpp> 68 template <
class TLabelIterator,
class TIdIterator>
69 void fit(TLabelIterator first_label,
const TLabelIterator last_label, TIdIterator )
73 const int n_data = std::distance(first_label,last_label);
76 for( ; first_label != last_label; ++first_label)
78 S += std::sin(*first_label);
79 C += std::cos(*first_label);
83 const double R2 =
S*
S +
C*
C;
89 const double Re = std::sqrt(R2) / n_data;
102 Eigen::VectorXd kappa_vec(1);
104 Eigen::HybridNonLinearSolver<vonMisesKappaFunctor> solver(vmftrinstance);
105 solver.hybrj1(kappa_vec);
106 kappa = kappa_vec(0,0);
122 float pdf(
const float x,
const TId )
const 135 float pdf(
const float x)
const 162 pdf_normaliser = 1.0/(2.0*M_PI*boost::math::cyl_bessel_i(0,kappa));
168 using boost::math::cyl_bessel_i;
169 return std::log(2.0*M_PI*cyl_bessel_i(0,
kappa)) -
kappa*cyl_bessel_i(1,
kappa)/cyl_bessel_i(0,
kappa);
202 mu = std::atan2(
S,
C);
209 const double kappa_bessel = boost::math::cyl_bessel_i(0,
kappa);
212 catch (std::overflow_error)
Contains declaration of the canopy::vonMisesKappaFunctor struct, used for numerically solving for the...
double S
Sum of sines, used during fitting and combining distributions.
Definition: vonMisesDistribution.hpp:259
float kappa
The distribution's concentration parameter.
Definition: vonMisesDistribution.hpp:258
A functor object to work with Eigen's non-linear solver to numerically solve for the kappa parameter ...
Definition: vonMisesKappaFunctor.hpp:20
void printOut(std::ofstream &stream) const
Prints the defining parameters of the distribution to an output filestream.
Definition: vonMisesDistribution.hpp:145
friend std::ifstream & operator>>(std::ifstream &stream, vonMisesDistribution &dist)
Allows the distribution to be written to read from a file via the streaming operator '>>'...
Definition: vonMisesDistribution.hpp:253
float pdf(const float x, const TId) const
Returns the probability of a particular label.
Definition: vonMisesDistribution.hpp:122
void reset()
Reset method.
Definition: vonMisesDistribution.hpp:224
A distribution that defines the probabilities over a circular-valued label.
Definition: vonMisesDistribution.hpp:28
void readIn(std::ifstream &stream)
Reads the defining parameters of the distribution from a filestream.
Definition: vonMisesDistribution.hpp:155
Namespace containing the canopy library for random forest models.
Definition: circularRegressor.hpp:13
void normalise()
Normalise the distribution to ensure it is valid.
Definition: vonMisesDistribution.hpp:200
void fit(TLabelIterator first_label, const TLabelIterator last_label, TIdIterator)
Fit the distribution to a set of labels.
Definition: vonMisesDistribution.hpp:69
vonMisesDistribution()
Basic constructor.
Definition: vonMisesDistribution.hpp:36
double C
Sum of cosines, used during fitting and combining distributions.
Definition: vonMisesDistribution.hpp:260
friend std::ofstream & operator<<(std::ofstream &stream, const vonMisesDistribution &dist)
Allows the distribution to be written to a file via the streaming operator '<<'.
Definition: vonMisesDistribution.hpp:248
float pdf_normaliser
Pre-calculated normalisation constant of the pdf equation.
Definition: vonMisesDistribution.hpp:261
float mu
The distribution's circular mean parameter.
Definition: vonMisesDistribution.hpp:257
float getMu() const
Get the mu parameter.
Definition: vonMisesDistribution.hpp:232
float getKappa() const
Get the kappa parameter.
Definition: vonMisesDistribution.hpp:240
void combineWith(const vonMisesDistribution &dist, const TId)
Combine this distribution with a second by summing the probability values, without normalisation...
Definition: vonMisesDistribution.hpp:186
float pdf(const float x) const
Returns the probability of a particular label.
Definition: vonMisesDistribution.hpp:135
void initialise()
Initialise the distribution before fitting.
Definition: vonMisesDistribution.hpp:44
float entropy() const
Return the (differential) entropy of the distribution.
Definition: vonMisesDistribution.hpp:166