/usr/include/shogun/distributions/Distribution.h is in libshogun-dev 3.1.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 | /*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* Written (W) 1999-2009 Soeren Sonnenburg
* Copyright (C) 1999-2009 Fraunhofer Institute FIRST and Max-Planck-Society
*/
#ifndef _DISTRIBUTION_H___
#define _DISTRIBUTION_H___
#include <shogun/features/Features.h>
#include <shogun/mathematics/Math.h>
#include <shogun/base/SGObject.h>
namespace shogun
{
class CFeatures;
class CMath;
/** @brief Base class Distribution from which all methods implementing a
* distribution are derived.
*
* Distributions are based on some general feature object and have to implement
* interfaces to
*
* train() - for learning a distribution
* get_num_model_parameters() - for the total number of model parameters
* get_log_model_parameter() - for the n-th model parameter (logarithmic)
* get_log_derivative() - for the partial derivative wrt. to the n-th
* model parameter
* get_log_likelihood_example() - for the likelihood for the
* n-th example
*
* This way methods building on CDistribution, might enumerate over all possible
* model parameters and obtain the parameter vector and the gradient. This is
* used to compute e.g. the TOP and Fisher Kernel (cf. CPluginEstimate, CHistogramKernel,
* CTOPFeatures and CFKFeatures ).
*/
class CDistribution : public CSGObject
{
public:
/** default constructor */
CDistribution();
/** destructor */
virtual ~CDistribution();
/** learn distribution
*
* @param data training data (parameter can be avoided if distance or
* kernel-based classifiers are used and distance/kernels are
* initialized with train data)
*
* @return whether training was successful
*/
virtual bool train(CFeatures* data=NULL)=0;
/** get number of parameters in model
*
* abstract base method
*
* @return number of parameters in model
*/
virtual int32_t get_num_model_parameters()=0;
/** get number of parameters in model that are relevant,
* i.e. > ALMOST_NEG_INFTY
*
* @return number of relevant model parameters
*/
virtual int32_t get_num_relevant_model_parameters();
/** get model parameter (logarithmic)
*
* abstract base method
*
* @return model parameter (logarithmic)
*/
virtual float64_t get_log_model_parameter(int32_t num_param)=0;
/** get partial derivative of likelihood function (logarithmic)
*
* abstract base method
*
* @param num_param derivative against which param
* @param num_example which example
* @return derivative of likelihood (logarithmic)
*/
virtual float64_t get_log_derivative(
int32_t num_param, int32_t num_example)=0;
/** compute log likelihood for example
*
* abstract base method
*
* @param num_example which example
* @return log likelihood for example
*/
virtual float64_t get_log_likelihood_example(int32_t num_example)=0;
/** compute log likelihood for whole sample
*
* @return log likelihood for whole sample
*/
virtual float64_t get_log_likelihood_sample();
/** compute log likelihood for each example
*
* @return log likelihood vector
*/
virtual SGVector<float64_t> get_log_likelihood();
/** get model parameter
*
* @param num_param which param
* @return model parameter
*/
virtual float64_t get_model_parameter(int32_t num_param)
{
return exp(get_log_model_parameter(num_param));
}
/** get partial derivative of likelihood function
*
* @param num_param partial derivative against which param
* @param num_example which example
* @return derivative of likelihood function
*/
virtual float64_t get_derivative(
int32_t num_param, int32_t num_example)
{
return exp(get_log_derivative(num_param, num_example));
}
/** compute likelihood for example
*
* @param num_example which example
* @return likelihood for example
*/
virtual float64_t get_likelihood_example(int32_t num_example)
{
return exp(get_log_likelihood_example(num_example));
}
/** compute likelihood for all vectors in sample
*
* @return likelihood vector for all examples
*/
virtual SGVector<float64_t> get_likelihood_for_all_examples();
/** set feature vectors
*
* @param f new feature vectors
*/
virtual void set_features(CFeatures* f)
{
SG_REF(f);
SG_UNREF(features);
features=f;
}
/** get feature vectors
*
* @return feature vectors
*/
virtual CFeatures* get_features()
{
SG_REF(features);
return features;
}
/** set pseudo count
*
* @param pseudo new pseudo count
*/
virtual void set_pseudo_count(float64_t pseudo) { pseudo_count=pseudo; }
/** get pseudo count
*
* @return pseudo count
*/
virtual float64_t get_pseudo_count() { return pseudo_count; }
protected:
/** feature vectors */
CFeatures* features;
/** pseudo count */
float64_t pseudo_count;
};
}
#endif
|