00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __plLearnUnKHistogram_h__
00021 #define __plLearnUnKHistogram_h__
00022
00023 #include <plLearn.h>
00024 #include <plLearnType.h>
00025 #include <pl.h>
00026
00027
00028 enum { BOUNDARY, SELECT };
00029
00030
00031 class plUnKHistogramParameters
00032 {
00033 protected :
00034 int _parameter_t;
00035 const plVariablesConjunction& _var;
00036 plValues _min;
00037 plValues _max;
00038 const vector<plValues>* _selected_values;
00039
00040 public :
00041 plUnKHistogramParameters( const plVariablesConjunction& var,
00042 const plValues& min, const plValues& max )
00043 : _parameter_t( BOUNDARY ), _var( var ), _min( min ), _max( max ),
00044 _selected_values( NULL ) {}
00045
00046 plUnKHistogramParameters( const plVariablesConjunction& var,
00047 const vector<plValues>& selected_values )
00048 : _parameter_t( SELECT ), _var( var ), _min( var ), _max( var ),
00049 _selected_values( &selected_values ){}
00050
00051 inline int getType() const
00052 {
00053 return _parameter_t;
00054 }
00055
00056 inline const plVariablesConjunction& getVar() const
00057 {
00058 return _var;
00059 }
00060
00061 inline const plValues& getMin() const
00062 {
00063 return _min;
00064 }
00065
00066 inline const plValues& getMax() const
00067 {
00068 return _max;
00069 }
00070
00071 inline const vector<plValues>* getSelectedValues() const
00072 {
00073 return _selected_values;
00074 }
00075 };
00076
00077
00078 class plLearnInitMap
00079 {
00080 public:
00081
00082 plLearnInitMap() : init(NULL){};
00083 plLearnInitMap( const map<plDataValues, plLearnFrequence >& initial );
00084 void assign( const map<plDataValues, plLearnFrequence >& initial );
00085 plLearnInitMap( map<plDataValues, plLearnFrequence >* initial,
00086 bool copie=false );
00087 void assign( map<plDataValues, plLearnFrequence >* initial,
00088 bool copie=false );
00089
00090 map<plDataValues, plLearnFrequence >::const_iterator
00091 begin(void) const
00092 {
00093 return init->begin();
00094 }
00095
00096 map<plDataValues, plLearnFrequence >::const_iterator
00097 end(void) const
00098 {
00099 return init->end();
00100 }
00101
00102 map<plDataValues, plLearnFrequence >::const_iterator
00103 find(const plDataValues& key ) const
00104 {
00105 return init->find(key);
00106 }
00107
00108 friend class plLearnUnKHistogram;
00109
00110 protected :
00111 map< plDataValues, plLearnFrequence > *const init;
00112 };
00113
00114
00115 void count_normalisation( const map<plDataValues, plLearnFrequence >& initial,
00116 plLearnFrequencesTotal* total );
00117
00118
00119
00122 class plLearnUnKHistogram : public plNonCndLearnObject
00123 {
00124 protected:
00125
00126
00129 void get_boundaries( plDataValues& min_ref, plDataValues& max_ref ) const;
00130
00131
00132 const bool initialized;
00133 const bool copied;
00134 const plLearnFrequencesTotal _tot_init_samples;
00135 plLearnInitMap minit;
00136
00137 map< plDataValues,plLearnFrequence> histo;
00138
00139
00140 public:
00141
00143 plLearnUnKHistogram(const plLearnUnKHistogram & plLUKH);
00144
00145 plLearnUnKHistogram( const plVariablesConjunction &vars );
00146
00151 plLearnUnKHistogram( const plVariablesConjunction &vars,
00152 map< plDataValues, plLearnFrequence >*const initial,
00153 bool copie=false );
00154
00156 plLearnUnKHistogram( const plVariablesConjunction &vars,
00157 const map< plDataValues, plLearnFrequence >& initial );
00158
00159
00160
00161
00162 virtual ~plLearnUnKHistogram(){};
00163
00164 void reset(void);
00165
00166 void internal_addPoint(const plDataValues &point, double weight=1.0);
00167
00170 virtual void get_boundaries( plValues& min_ref, plValues& max_ref ) const;
00171
00172
00173
00174
00178 virtual void get_frequencies( map< plDataValues,plLearnFrequence>& map_ref ) const;
00179
00182 virtual void select_frequencies( vector<plLearnFrequence>& frequencies_ref,
00183 const vector<plValues>& selected_values ) const;
00184
00185
00187 virtual const map< plDataValues,plLearnFrequence>& get_map_histo( void ) const;
00188
00192 virtual void get_plProbValue( map< plDataValues,plProbValue>& prob_map_ref )
00193 const;
00194
00195
00199 virtual void select_plProbValue(vector<plProbValue>& prob_ref,
00200 const vector<plValues>& selected_values ) const;
00201
00202
00206 virtual plProbValue *
00207 select_plProbValue( const vector<plValues>& selected_values ) const;
00208
00209
00210
00215 void get_frequencies( plLearnFrequence* frequencies ) const;
00217 void get_frequencies( vector<plLearnFrequence>& frequencies_ref ) const;
00218
00221 void get_frequencies( plLearnFrequence* frequencies,
00222 const plValues& min,
00223 const plValues& max ) const;
00224 void get_frequencies( vector<plLearnFrequence>& frequencies_ref,
00225 const plValues& min,
00226 const plValues& max ) const;
00227
00228
00231 virtual void get_plProbValue( vector<plProbValue>& prob_ref ) const;
00232
00235 virtual void get_plProbValue(vector<plProbValue>& prob_ref,
00236 const plValues& min,
00237 const plValues& max) const;
00238
00242 virtual plProbValue *get_plProbValue(const plValues& min,
00243 const plValues& max) const;
00244
00245 void get_params(plValues ¶ms) const;
00246
00248 plKernel get_distribution( const void *parameters = NULL ) const
00249 {
00250 if(!parameters) return plKernel();
00251
00252 vector<plProbValue> prob;
00253 const plUnKHistogramParameters *p = (const plUnKHistogramParameters *)parameters;
00254
00255 switch( p->getType() )
00256 {
00257 case BOUNDARY :
00258 get_plProbValue( prob, p->getMin(), p->getMax() ); break;
00259 case SELECT : select_plProbValue( prob, *(p->getSelectedValues()) ); break;
00260 default :printf( "Unknown parameter type for get_distribution of plLearnUnKHistogram\n" );
00261 abort();
00262 exit(-1);
00263 }
00264
00265 return plProbTable( p->getVar(), prob, false );
00266 }
00267
00268 };
00269
00270 #endif