SiGraph: sulcal graphs


adaptiveLeaf.h
Go to the documentation of this file.
1
2
3#ifndef SI_MODEL_ADAPTIVELEAF_H
4#define SI_MODEL_ADAPTIVELEAF_H
5
6
7#include <si/model/adaptive.h>
9#include <si/graph/clique.h>
13#include <si/descr/adapDescr.h>
16#include <si/graph/attrib.h>
17#include <si/graph/mgraph.h>
19
20
21namespace sigraph
22{
23 class Learner;
24
27 class AdaptiveLeaf : public Adaptive
28 {
29 public:
37
38 AdaptiveLeaf( const CliqueDescr * cd = 0, const SubAdaptive *work = 0,
39 const SubAdaptive *eval = 0 );
40 AdaptiveLeaf( const AdaptiveLeaf & ad );
41 virtual ~AdaptiveLeaf();
42 virtual Model* clone() const;
43
48
51
52 virtual void getVectors(AdapDescr &ad, Learner &learner,
53 const std::list<Clique *> &cliques,
54 int cycle, int &cur_cycle);
55 virtual void generateDataBase(Learner &learner, const std::string &prefix,
56 const std::list<Clique *> *lrnCliques,
57 const std::list<Clique *> *tstCliques,
58 int cycles, int cycles_tst);
59
60 virtual std::string getDataBaseName(const std::string &prefix);
61
63 virtual double prop( const Clique * );
64 /* virtual double prop( const Clique* cl,
65 const std::map<Vertex*, std::string> & changes ); */
66 virtual bool doesOutputChange( const Clique* cl,
67 const std::map<Vertex*,
68 std::string> & changes ) const;
70 virtual double eval( const Clique * );
72 virtual void init();
74 virtual bool openFile( const std::string & basename = "" );
76 virtual void closeFile();
78 virtual void subFiles( const std::string & prefix,
79 std::set<std::string> & listNames ) const;
81 virtual double errorRate() const { return( _work->errorRate() ); }
83 virtual double genErrorRate() const
84 { return( _work->genMeanErrorRate() ); }
85 virtual double relianceWeight() const
86 { return _work->relianceWeight(); }
87
88 virtual double printDescription( Clique* cl, bool withnames );
89 virtual bool checkLearnFinished();
92 virtual void forceLearnFinished();
94
97
98 virtual void resetStats();
100 virtual void trainStats(Learner &learner,
101 const std::list<Clique *> &cliques);
103 virtual void centerAndReduce(std::vector<double> &vec);
105
108
111 SubAdaptive & workEl() const { return( *_work ); }
113 const DimReductor* dimreductor() const { return _dimreductor; }
115 const Optimizer & optimizer() const { return *_optimizer; }
117 inline void setWorkEl(SubAdaptive *work)
118 {
119 if (_work) delete _work;
120 _work = work;
121 }
122
124 const std::vector<float> &getMean(void) const { return _mean; };
126 const std::vector<float> &getStd(void) const { return _std; };
128 void setOptimizer( Optimizer* opt);
129 SubAdaptive *workMemoEl() const { return _workMemo; }
131 SubAdaptive & evalEl() { return( *_eval ); }
133 const SubAdaptive & evalEl() const { return( *_eval ); }
135 void setWork( const SubAdaptive & w );
137 void setEval( const SubAdaptive & e );
139 void setWorkMemo( const SubAdaptive & w );
141 void setEvalMemo( const SubAdaptive & e );
142 const CliqueDescr & cliqueDescr() const { return( *_cliqueDescr ); }
144 void setCliqueDescr( CliqueDescr* cd );
146 void setMean(const std::vector<float> &mean) { _mean = mean; };
148 void setStd(const std::vector<float> &std) { _std = std; };
150
152 void buildTree( Tree & tr ) const;
153 virtual void setBaseName( const std::string & basename );
154
156 virtual void memorize();
158 virtual void revert();
159 State learnState() const { return( _lrnState ); }
161 unsigned nDataMemo() const { return( _ndataMemo ); }
162 void setNDataMemo( unsigned n ) { _ndataMemo = n; }
166
167 protected:
180 unsigned _ndataMemo;
186 std::vector<float> _mean;
188 std::vector<float> _std;
189
190 private:
191
192 };
193
194
195 // Fonctions
196
198 : Adaptive( ad ), _work( ad._work->clone() ),
199 _eval( ad._eval ? ad._eval->clone() : 0 ),
200 _cliqueDescr( ad._cliqueDescr ? ad._cliqueDescr->clone() : 0 ),
201 _lrnState( ad._lrnState ),
202 _workMemo( ad._workMemo ? ad._workMemo->clone() : 0 ),
203 _evalMemo( ad._evalMemo ? ad._evalMemo->clone() : 0 ),
206 _optimizer(ad._optimizer ? ad._optimizer->clone() : 0)
207 {
208 }
209
210
212 {
213 return( new AdaptiveLeaf( *this ) );
214 }
215
216
218 {
219 if( this != & ad )
220 {
221 delete _work;
222 delete _eval;
223 delete _cliqueDescr;
224 _work = ad._work->clone();
225 _eval = ( ad._eval ? ad._eval->clone() : 0 );
227 _lrnState = ad._lrnState;
228 _workMemo = ( ad._workMemo ? ad._workMemo->clone() : 0 );
229 _evalMemo = ( ad._evalMemo ? ad._evalMemo->clone() : 0 );
230 _dimreductor = (ad._dimreductor ? ad._dimreductor->clone() : 0);
231 _optimizer = (ad._optimizer ? ad._optimizer->clone() : 0);
233 }
234 return( *this );
235 }
236
237
238 inline double AdaptiveLeaf::prop( const Clique* cl )
239 {
240 std::vector<double> vec;
242 double w, p = 0;
243 Graph *g = NULL;
244 int ng;
245 bool true_vector;
246 TopModel *tm = topModel();
247
248 if( tm )
249 w = tm->weight();
250 else w = 1.;
251
252 true_vector = _cliqueDescr->makeVector( cl, vec, ao );
253 if (!true_vector)
254 {
255 g = tm->mGraph();
256 ASSERT(g->getProperty( SIA_NBASEGRAPHS, ng));
257 ASSERT(ng);
258 ao->getProperty(SIA_NOINSTANCE_COUNT, p);
259
260 double f = 1. - double(p)/ng;
261 double thld = 0.85;
262
263 return (0.5 / ( 1 + exp( -(f - thld) * 40 ) )) * w *
264 _work->relianceWeight();
265 }
266 _cliqueDescr->preProcess( vec, ao );
267 std::vector<double> *redvec;
268 std::vector<double> rvec;
269 if( dimreductor() )
270 {
271 //FIXME : pour que le code sans dimreduction marche toujours
272 // l'application des stats n'est active que dans ce mode
273 centerAndReduce(vec);
274 rvec.reserve( dimreductor()->reducedDim() );
275 rvec.insert( rvec.end(), dimreductor()->reducedDim(), 0 );
276 dimreductor()->transform( vec, rvec );
277 redvec = &rvec;
278 }
279 else
280 redvec = &vec;
281 p = _work->prop( *redvec );
282 return p * w * _work->relianceWeight();
283 }
284
285 inline double AdaptiveLeaf::eval( const Clique* cl )
286 {
287 std::vector<double> vec;
289
290 if( _eval )
291 {
292 _cliqueDescr->makeVector( cl, vec, ao );
293 _cliqueDescr->preProcess( vec, ao );
294 std::vector<double> *redvec;
295 std::vector<double> rvec;
296 if( dimreductor() )
297 {
298 //FIXME : pour que le code sans dimreduction marche toujours
299 // l'application des stats n'est active que dans ce mode
300 centerAndReduce(vec);
301 rvec.reserve( dimreductor()->reducedDim() );
302 rvec.insert( rvec.end(), dimreductor()->reducedDim(), 0 );
303 dimreductor()->transform( vec, rvec );
304 redvec = &rvec;
305 }
306 else
307 redvec = &vec;
308 double x = _eval->prop( *redvec );
309 return x;
310 }
311 else
312 return errorRate();
313 }
314
315
316 inline void AdaptiveLeaf::setWork( const SubAdaptive & w )
317 {
318 delete _work;
319 _work = w.clone();
320 }
321
322
323 inline void AdaptiveLeaf::setEval( const SubAdaptive & e )
324 {
325 delete _eval;
326 _eval = e.clone();
327 }
328
329
330 inline void AdaptiveLeaf::setWorkMemo( const SubAdaptive & w )
331 {
332 delete _workMemo;
333 _workMemo = w.clone();
334 }
335
336
337 inline void AdaptiveLeaf::setEvalMemo( const SubAdaptive & e )
338 {
339 delete _evalMemo;
340 _evalMemo = e.clone();
341 }
342
343
345 {
346 delete _cliqueDescr;
347 _cliqueDescr = cd;
348 }
349
355
357 {
358 delete _optimizer;
360 }
361
362}
363
364
365#endif
366
367
#define ASSERT(EX)
#define SIA_NBASEGRAPHS
Definition attrib.h:12
#define SIA_NOINSTANCE_COUNT
Definition attrib.h:36
Clique descriptor with description for learning.
Definition adapDescr.h:37
El�ment adaptatif terminal.
virtual double prop(const Clique *)
Propagation (r�ponse de l'Adaptive)
virtual void subFiles(const std::string &prefix, std::set< std::string > &listNames) const
Donne la liste des fichiers sous le mod�le.
SubAdaptive * _eval
El�ment d'�valuation.
SubAdaptive * _workMemo
Memorisation des SubAdap.
void update(sigraph::AdaptiveLeaf &ad)
Update internal values (including work element, learning state) from an other adaptiveleaf.
SubAdaptive & workEl() const
Acc�s � l'�l�ment efficace (qui donne la sortie utile)
virtual void getVectors(AdapDescr &ad, Learner &learner, const std::list< Clique * > &cliques, int cycle, int &cur_cycle)
R�cup�re une liste de cliques.
AdapDescr * getAdapDescr(void)
Renvoit le descripteur adaptatif du mod�le s'il existe ou NULL.
virtual double genErrorRate() const
Taux d'erreur de g�n�ralisation.
unsigned nDataMemo() const
void setWorkEl(SubAdaptive *work)
Set work element (no copy), old one is deleted if needed.
std::vector< float > _mean
mean of database vectors
void setStd(const std::vector< float > &std)
Set database standard deviation vector.
void setDimReductor(DimReductor *dimreductor)
State
Etat d'apprentissage.
virtual void init()
Initialisation des parties adaptatives (fonction abstraite)
virtual void revert()
Retour aux mod�les m�moris�s.
virtual Model * clone() const
Duplication (fonction abstraite)
const std::vector< float > & getMean(void) const
Get database mean vector.
const CliqueDescr & cliqueDescr() const
void setNDataMemo(unsigned n)
SubAdaptive * _work
El�ment efficace.
void setWork(const SubAdaptive &w)
Remplacement de l'�l�ment efficace.
SubAdaptive & evalEl()
Acc�s � l'�l�ment d'�valuation.
virtual void generateDataBase(Learner &learner, const std::string &prefix, const std::list< Clique * > *lrnCliques, const std::list< Clique * > *tstCliques, int cycles, int cycles_tst)
Apprentissage du modèle sur lrn et test avec tst.
void setEval(const SubAdaptive &e)
Remplacament de l'�l�ment d'�valuation.
virtual void memorize()
M�morisation des mod�les.
virtual void closeFile()
Ferme le(s) fichier(s) de sauvegardes des donn�es re�ues.
DimReductor * _dimreductor
dimension reduction element
virtual std::string getDataBaseName(const std::string &prefix)
const std::vector< float > & getStd(void) const
Get database std vector.
SubAdaptive * workMemoEl() const
virtual double eval(const Clique *)
Evaluation (confiance dans la r�ponse au point donn�)
const SubAdaptive & evalEl() const
Acc�s � l'�l�ment d'�valuation, version const.
void setLearnState(State s)
void buildTree(Tree &tr) const
Conversion en arbre (pour IO)
CliqueDescr & cliqueDescr()
SubAdaptive * _evalMemo
virtual void setBaseName(const std::string &basename)
void setCliqueDescr(CliqueDescr *cd)
void setEvalMemo(const SubAdaptive &e)
Remplacament de l'�l�ment d'�valuation m�moris�
std::vector< float > _std
standard deviation of database vectors
AdaptiveLeaf(const CliqueDescr *cd=0, const SubAdaptive *work=0, const SubAdaptive *eval=0)
State _lrnState
Etat de l'apprentissage.
const DimReductor * dimreductor() const
Return Dimension Reductor element definition.
virtual bool openFile(const std::string &basename="")
Ouvre le(s) fichier(s) de sauvegardes des donn�es re�ues.
virtual double relianceWeight() const
State learnState() const
virtual bool checkLearnFinished()
fonction non-const pcq elle peut positionner le flag
AdaptiveLeaf & operator=(const AdaptiveLeaf &ad)
virtual void resetStats()
Vide toutes les stats.
Optimizer * _optimizer
optimizer element
void setMean(const std::vector< float > &mean)
Set database mean vector.
const Optimizer & optimizer() const
Return Optimizer definition (parmeters, ranges, scale)
unsigned _ndataMemo
M�morisation du nombre de donn�es apprises.
virtual void trainStats(Learner &learner, const std::list< Clique * > &cliques)
Ajout � la base de statistiques.
void setOptimizer(Optimizer *opt)
virtual double printDescription(Clique *cl, bool withnames)
Calcule le potentiel et garde le(s) vecteur(s) de description.
virtual void centerAndReduce(std::vector< double > &vec)
center and reduce vector according to _mean and _std
virtual bool doesOutputChange(const Clique *cl, const std::map< Vertex *, std::string > &changes) const
tells whether a label change inpacts the model output or not.
virtual void forceLearnFinished()
fait ce qu'il faut pour "fermer" l'apprentissage (remet le dernier m�mo...)
CliqueDescr * _cliqueDescr
Descripteur de clique.
void setWorkMemo(const SubAdaptive &w)
Remplacement de l'�l�ment efficace m�moris�
virtual double errorRate() const
Taux d'erreur d'apprentissage global.
Adaptive(Model *parent=0)
Definition adaptive.h:100
Descripteur de clique (classe abstraite).
Definition cliqueDescr.h:36
virtual CliqueDescr * clone() const =0
Classe Clique.
Definition clique.h:35
Feature Selector :
Definition dimreductor.h:17
virtual DimReductor * clone() const =0
virtual std::vector< double > * transform(const std::vector< double > &v) const
Definition dimreductor.h:52
Séquence d'apprentissage, classe de base (abstraite).
Definition learner.h:22
Modèle pour l'évaluation de cliques de graphes (classe abstraite).
Definition model.h:26
virtual carto::AttributedObject * graphObject()
Donne l'élément parent du graphe modèle.
Definition model.h:183
virtual TopModel * topModel()
Donne la base de l'arborescence (TopModel, s'il y en a)
Definition model.h:171
virtual Optimizer * clone() const =0
Sous-élément adaptatif (classe abstraite).
Definition subAdaptive.h:30
virtual SubAdaptive * clone() const =0
copie
double weight() const
Definition topModel.h:53
const MGraph * mGraph() const
Definition topModel.h:51
SyntaxedObject< PropertySet > AttributedObject
STL namespace.