Main Page | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members

plLearnUnKHistogram.h

00001 /*==============================================================================
00002  * Product        : OpenPL 
00003  * File           : plLearnUnKHistogram.h
00004  * Author         : Manuel Yguel
00005  * Creation       : Mon Nov 10 08:52:09 2003
00006  *
00007  *==============================================================================
00008  *     (c) Copyright 2003, Centre National de la Recherche Scientifique,
00009  *                              all rights reserved
00010  *==============================================================================
00011  *
00012  *------------------------- Description ----------------------------------------
00013  *   Learning n dimensionnal histograms with UNKNOWN variables definition 
00014  *  sets.
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 /* plUnKHistogramParameters class */
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   /*CONSTRUCTORS*/
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 &params) 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

Generated on Fri Apr 1 10:58:14 2005 for ProBT by  doxygen 1.4.1