Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes
pdf1d_weighted_kernel_pdf Class Reference

Class for univariate kernel based PDFs. More...

#include <pdf1d_weighted_kernel_pdf.h>

Inheritance diagram for pdf1d_weighted_kernel_pdf:
Inheritance graph
[legend]

List of all members.

Public Member Functions

void set_weight (const vnl_vector< double > &weights)
 Set the weights.
void swap_weight (vnl_vector< double > &weights)
 Swap in the weights values.
const vnl_vector< double > & weight () const
 Weight of each kernel.
virtual void set_centres (const vnl_vector< double > &x, double width)
 Initialise so all kernels have the same width.
virtual void set_centres (const vnl_vector< double > &x, const vnl_vector< double > &width)
 Initialise so all kernels have given width.
short version_no () const
 Version number for I/O.
virtual vcl_string is_a () const
 Name of the class.
virtual bool is_class (vcl_string const &s) const
 Does the name of the class match the argument?.
virtual void print_summary (vcl_ostream &os) const
 Print class to os.
virtual void b_write (vsl_b_ostream &bfs) const
 Save class to binary file stream.
virtual void b_read (vsl_b_istream &bfs)
 Load class from binary file stream.
const vnl_vector< double > & centre () const
 Position of kernel centres.
const vnl_vector< double > & width () const
 Width of each kernel.
bool all_same_width () const
 True if all kernels have the same width.
virtual double inverse_cdf (double P) const
 The inverse cdf.
double mean () const
 Mean of distribution.
double variance () const
 Variance of each dimension.
virtual int n_peaks () const
 Number of peaks of distribution.
virtual double peak (int) const
 Position of the i'th peak.
virtual double log_p (double x) const =0
 Log of probability density at x.
virtual double operator() (double x) const
 Probability density at x.
virtual double cdf (double x) const
 Cumulative Probability (P(x'<x) for x' drawn from the distribution.
virtual bool cdf_is_analytic () const
 Return true if cdf() uses an analytic implementation.
virtual double gradient (double x, double &p) const =0
 Gradient and value of PDF at x.
virtual pdf1d_samplernew_sampler () const =0
 Create a sampler object on the heap.
virtual double log_prob_thresh (double pass_proportion) const
 Compute threshold for PDF to pass a given proportion.
virtual double nearest_plausible (double x, double log_p_min) const =0
 Compute nearest point to x which has a density above a threshold.
virtual bool is_valid_pdf () const
 Return true if the object represents a valid PDF.
void get_samples (vnl_vector< double > &x) const
 Fill x with samples drawn from distribution.
virtual pdf1d_pdfclone () const =0
 Create a copy on the heap and return base class pointer.
bool write_plot_file (const vcl_string &plot_file, double min_x, double max_x, int n) const
 Write values (x,p(x)) to text file suitable for plotting.

Static Public Member Functions

static void pdf1d_weighted_kernel_mean_var (double &mean, double &var, const vnl_vector< double > &centres, const vnl_vector< double > &widths, const vnl_vector< double > &weights)
 calc the weighted mean and var of kernels.

Protected Member Functions

void set_mean (double m)
void set_variance (double v)

Protected Attributes

vnl_vector< double > weight_
 Weight of each kernel.
double sum_weights_
vnl_vector< double > x_
 Position of kernel centres.
vnl_vector< double > width_
 Width of each kernel.
vcl_vector< int > index_
 Workspace.
bool all_same_width_
 True if all kernels have the same width.

Detailed Description

Class for univariate kernel based PDFs.

Distribution is the sum of a set of kernel functions placed on the training samples.

Essentially a special case of a mixture model. It differs from the former in that a) every component has the same shape, though possibly a different width b) Usually one uses different training algorithms. Mixture models are more general.

Use a normal kernel pdf builder to build this, and then set the weights separately.

Definition at line 25 of file pdf1d_weighted_kernel_pdf.h.


Member Function Documentation

bool pdf1d_kernel_pdf::all_same_width ( ) const [inline, inherited]

True if all kernels have the same width.

Definition at line 61 of file pdf1d_kernel_pdf.h.

void pdf1d_weighted_kernel_pdf::b_read ( vsl_b_istream bfs) [virtual]

Load class from binary file stream.

Reimplemented from pdf1d_kernel_pdf.

Definition at line 140 of file pdf1d_weighted_kernel_pdf.cxx.

void pdf1d_weighted_kernel_pdf::b_write ( vsl_b_ostream bfs) const [virtual]

Save class to binary file stream.

Reimplemented from pdf1d_kernel_pdf.

Definition at line 130 of file pdf1d_weighted_kernel_pdf.cxx.

double pdf1d_pdf::cdf ( double  x0) const [virtual, inherited]

Cumulative Probability (P(x'<x) for x' drawn from the distribution.

Cumulative Probability (P(x'<x) for x' drawn from the distribution).

By default this can be calculated by drawing random samples from the distribution and computing the number less than x.

Reimplemented in pdf1d_flat, pdf1d_gaussian, pdf1d_exponential, pdf1d_mixture, pdf1d_epanech_kernel_pdf, pdf1d_gaussian_kernel_pdf, and pdf1d_weighted_epanech_kernel_pdf.

Definition at line 45 of file pdf1d_pdf.cxx.

bool pdf1d_pdf::cdf_is_analytic ( ) const [virtual, inherited]

Return true if cdf() uses an analytic implementation.

Default is false, as the base implementation is to draw samples from the distribution randomly to estimate cdf(x)

Reimplemented in pdf1d_flat, pdf1d_gaussian, pdf1d_exponential, pdf1d_mixture, pdf1d_epanech_kernel_pdf, pdf1d_gaussian_kernel_pdf, and pdf1d_weighted_epanech_kernel_pdf.

Definition at line 62 of file pdf1d_pdf.cxx.

const vnl_vector<double>& pdf1d_kernel_pdf::centre ( ) const [inline, inherited]

Position of kernel centres.

Definition at line 55 of file pdf1d_kernel_pdf.h.

virtual pdf1d_pdf* pdf1d_pdf::clone ( ) const [pure virtual, inherited]

Create a copy on the heap and return base class pointer.

Implemented in pdf1d_mixture, pdf1d_flat, pdf1d_gaussian, pdf1d_exponential, pdf1d_epanech_kernel_pdf, pdf1d_gaussian_kernel_pdf, and pdf1d_weighted_epanech_kernel_pdf.

void pdf1d_pdf::get_samples ( vnl_vector< double > &  x) const [inherited]

Fill x with samples drawn from distribution.

Utility function. This calls new_sampler() to do the work, then deletes the sampler again. If you intend calling this repeatedly, create a sampler yourself.

Definition at line 132 of file pdf1d_pdf.cxx.

virtual double pdf1d_pdf::gradient ( double  x,
double &  p 
) const [pure virtual, inherited]

Gradient and value of PDF at x.

Computes gradient of PDF at x, and returns the prob at x in p

Implemented in pdf1d_flat, pdf1d_gaussian, pdf1d_exponential, pdf1d_mixture, pdf1d_epanech_kernel_pdf, pdf1d_gaussian_kernel_pdf, and pdf1d_weighted_epanech_kernel_pdf.

double pdf1d_kernel_pdf::inverse_cdf ( double  P) const [virtual, inherited]

The inverse cdf.

The value of x: P(x'<x) = P for x' drawn from distribution pdf. Uses Newton-Raphson.

The value of x: P(x'<x) = P for x' drawn from distribution pdf.

Reimplemented from pdf1d_pdf.

Definition at line 69 of file pdf1d_kernel_pdf.cxx.

vcl_string pdf1d_weighted_kernel_pdf::is_a ( ) const [virtual]

Name of the class.

Reimplemented from pdf1d_kernel_pdf.

Reimplemented in pdf1d_weighted_epanech_kernel_pdf.

Definition at line 112 of file pdf1d_weighted_kernel_pdf.cxx.

bool pdf1d_weighted_kernel_pdf::is_class ( vcl_string const &  s) const [virtual]

Does the name of the class match the argument?.

Reimplemented from pdf1d_kernel_pdf.

Reimplemented in pdf1d_weighted_epanech_kernel_pdf.

Definition at line 105 of file pdf1d_weighted_kernel_pdf.cxx.

bool pdf1d_pdf::is_valid_pdf ( ) const [virtual, inherited]

Return true if the object represents a valid PDF.

This will return false, if n_dims() is 0, for example just ofter default construction.

Reimplemented in pdf1d_mixture.

Definition at line 126 of file pdf1d_pdf.cxx.

virtual double pdf1d_pdf::log_p ( double  x) const [pure virtual, inherited]
double pdf1d_pdf::log_prob_thresh ( double  pass_proportion) const [virtual, inherited]

Compute threshold for PDF to pass a given proportion.

Reimplemented in pdf1d_flat, pdf1d_gaussian, and pdf1d_exponential.

Definition at line 68 of file pdf1d_pdf.cxx.

double pdf1d_pdf::mean ( ) const [inline, inherited]

Mean of distribution.

Definition at line 42 of file pdf1d_pdf.h.

virtual int pdf1d_pdf::n_peaks ( ) const [inline, virtual, inherited]

Number of peaks of distribution.

Definition at line 48 of file pdf1d_pdf.h.

virtual double pdf1d_pdf::nearest_plausible ( double  x,
double  log_p_min 
) const [pure virtual, inherited]

Compute nearest point to x which has a density above a threshold.

If log_p(x)>log_p_min then x returned unchanged. Otherwise move (typically up the gradient) until log_p(x)>=log_p_min.

Implemented in pdf1d_flat, pdf1d_gaussian, pdf1d_exponential, pdf1d_mixture, pdf1d_epanech_kernel_pdf, pdf1d_gaussian_kernel_pdf, and pdf1d_weighted_epanech_kernel_pdf.

virtual pdf1d_sampler* pdf1d_pdf::new_sampler ( ) const [pure virtual, inherited]

Create a sampler object on the heap.

Caller is responsible for deletion.

Implemented in pdf1d_mixture, pdf1d_flat, pdf1d_gaussian, pdf1d_exponential, pdf1d_epanech_kernel_pdf, pdf1d_gaussian_kernel_pdf, and pdf1d_weighted_epanech_kernel_pdf.

double pdf1d_pdf::operator() ( double  x) const [virtual, inherited]
void pdf1d_weighted_kernel_pdf::pdf1d_weighted_kernel_mean_var ( double &  mean,
double &  var,
const vnl_vector< double > &  centres,
const vnl_vector< double > &  widths,
const vnl_vector< double > &  weights 
) [static]

calc the weighted mean and var of kernels.

w is expected to sum to n.

Definition at line 22 of file pdf1d_weighted_kernel_pdf.cxx.

virtual double pdf1d_pdf::peak ( int  ) const [inline, virtual, inherited]

Position of the i'th peak.

Definition at line 51 of file pdf1d_pdf.h.

void pdf1d_weighted_kernel_pdf::print_summary ( vcl_ostream &  os) const [virtual]

Print class to os.

Reimplemented from pdf1d_kernel_pdf.

Definition at line 121 of file pdf1d_weighted_kernel_pdf.cxx.

void pdf1d_weighted_kernel_pdf::set_centres ( const vnl_vector< double > &  x,
double  width 
) [virtual]

Initialise so all kernels have the same width.

This function resets the weights.

Reimplemented from pdf1d_kernel_pdf.

Definition at line 48 of file pdf1d_weighted_kernel_pdf.cxx.

void pdf1d_weighted_kernel_pdf::set_centres ( const vnl_vector< double > &  x,
const vnl_vector< double > &  width 
) [virtual]

Initialise so all kernels have given width.

This function resets the weights.

Reimplemented from pdf1d_kernel_pdf.

Definition at line 57 of file pdf1d_weighted_kernel_pdf.cxx.

void pdf1d_pdf::set_mean ( double  m) [inline, protected, inherited]

Reimplemented in pdf1d_gaussian.

Definition at line 31 of file pdf1d_pdf.h.

void pdf1d_pdf::set_variance ( double  v) [inline, protected, inherited]

Definition at line 32 of file pdf1d_pdf.h.

void pdf1d_weighted_kernel_pdf::set_weight ( const vnl_vector< double > &  weights)

Set the weights.

The weights will be scaled to sum to 1.0

Definition at line 70 of file pdf1d_weighted_kernel_pdf.cxx.

void pdf1d_weighted_kernel_pdf::swap_weight ( vnl_vector< double > &  weights)

Swap in the weights values.

This function is fast when you are changing the weights regularly The weights will be scaled to sum to 1.0

This function is fast when you are changing the weights regularly The weights will be scaled to sum to n

Definition at line 88 of file pdf1d_weighted_kernel_pdf.cxx.

double pdf1d_pdf::variance ( ) const [inline, inherited]

Variance of each dimension.

Definition at line 45 of file pdf1d_pdf.h.

short pdf1d_weighted_kernel_pdf::version_no ( ) const

Version number for I/O.

Reimplemented from pdf1d_kernel_pdf.

Reimplemented in pdf1d_weighted_epanech_kernel_pdf.

Definition at line 98 of file pdf1d_weighted_kernel_pdf.cxx.

const vnl_vector<double>& pdf1d_weighted_kernel_pdf::weight ( ) const [inline]

Weight of each kernel.

Definition at line 50 of file pdf1d_weighted_kernel_pdf.h.

const vnl_vector<double>& pdf1d_kernel_pdf::width ( ) const [inline, inherited]

Width of each kernel.

Definition at line 58 of file pdf1d_kernel_pdf.h.

bool pdf1d_pdf::write_plot_file ( const vcl_string &  plot_file,
double  min_x,
double  max_x,
int  n 
) const [inherited]

Write values (x,p(x)) to text file suitable for plotting.

Evaluate pdf at n points in range [min_x,max_x] and write a text file, each line of which is {x p(x)}, suitable for plotting with many graph packages

Definition at line 142 of file pdf1d_pdf.cxx.


Member Data Documentation

bool pdf1d_kernel_pdf::all_same_width_ [protected, inherited]

True if all kernels have the same width.

Definition at line 38 of file pdf1d_kernel_pdf.h.

vcl_vector<int> pdf1d_kernel_pdf::index_ [mutable, protected, inherited]

Workspace.

If non-empty x_(index[i]) <= x_(index[i+1])

Definition at line 35 of file pdf1d_kernel_pdf.h.

Definition at line 30 of file pdf1d_weighted_kernel_pdf.h.

Weight of each kernel.

Definition at line 29 of file pdf1d_weighted_kernel_pdf.h.

vnl_vector<double> pdf1d_kernel_pdf::width_ [protected, inherited]

Width of each kernel.

Definition at line 31 of file pdf1d_kernel_pdf.h.

vnl_vector<double> pdf1d_kernel_pdf::x_ [protected, inherited]

Position of kernel centres.

Definition at line 28 of file pdf1d_kernel_pdf.h.


The documentation for this class was generated from the following files: