11 #ifndef AIMS_CLASSIFICATION_CAH_H 12 #define AIMS_CLASSIFICATION_CAH_H 14 #include <aims/vector/vector.h> 15 #include <aims/data/data_g.h> 16 #include <aims/classification/individuals.h> 18 #include <aims/math/discriminantanalysis.h> 21 class ProbabilisticPcaElement ;
28 Element(
int number,
int card,
const std::set<int>& constitutedFrom = std::set<int>() ) :
29 _number(number), _card(card), _constitutedFrom(constitutedFrom)
31 if( _constitutedFrom.empty() )
32 _constitutedFrom.insert(number) ;
36 int number()
const {
return _number ;}
39 int card()
const {
return _card ;}
40 void setCard(
int card ) { _card = card ;}
45 const std::vector< std::list< Point3d > >& classes,
46 const AimsData<T>& data,
const AimsData<float>& initDistances ) = 0 ;
49 const std::vector< std::list< Point3d > >& classes,
50 const AimsData<T>& data,
const AimsData<float>& initDistances,
int newNb = -1 ) = 0 ;
62 BaryElement(
int card,
const aims::Individuals<float>& bary,
63 const std::set<int>& constitutedFrom = std::set<int>(),
int number = -1 ) ;
64 BaryElement(
const std::vector<std::list< Point3d > >& classes,
65 const AimsData<T>& data,
66 const std::set<int>& constitutedFrom = std::set<int>(),
int number = -1 ) ;
69 const std::vector<float> &
baryValue()
const {
return _bary.value() ; }
73 const std::vector< std::list< Point3d > >& classes,
74 const AimsData<T>& data,
const AimsData<float>& initDistances ) ;
77 const std::vector< std::list< Point3d > >& classes,
78 const AimsData<T>& data,
const AimsData<float>& initDistances,
int newNb = -1 ) ;
81 void computeBary(
const std::vector<std::list< Point3d > >& classes,
82 const AimsData<T>& data ) ;
84 aims::Individuals<float> _bary ;
92 PcaElement(
const std::vector<std::list< Point3d > >& classes,
93 const AimsData<T>& data,
int numberOfSignificantVps,
94 const std::set<int>& constitutedFrom = std::set<int>(),
int number = -1 ) ;
99 const std::vector< std::list< Point3d > >& classes,
100 const AimsData<T>& data,
const AimsData<float>& initDistances ) ;
103 const std::vector< std::list< Point3d > >& classes,
104 const AimsData<T>& data,
const AimsData<float>& initDistances,
int newNb = -1 ) ;
105 float unreconstructedInertia() ;
106 float meanReconstructionError() ;
107 float varReconstructionError() ;
112 void computeReconstructionError(
const std::vector< std::list< Point3d > >& classes,
113 const AimsData<T>& data ) ;
114 float error(
const Point3d& p,
const AimsData<T>& data ) ;
127 template <
typename T>
132 const AimsData<T>& data,
int numberOfSignificantVps,
133 const std::set<int>& constitutedFrom = std::set<int>(),
int number = -1 ) ;
138 const std::vector< std::list< Point3d > >& classes,
139 const AimsData<T>& data,
const AimsData<float>& initDistances ) ;
142 const std::vector< std::list< Point3d > >& classes,
143 const AimsData<T>& data,
const AimsData<float>& initDistances,
int newNb = -1 ) ;
147 float unreconstructedInertia() ;
148 float meanReconstructionError() ;
149 float varReconstructionError() ;
152 void computeReconstructionError(
const std::vector< std::list< Point3d > >& classes,
153 const AimsData<T>& data ) ;
154 float _meanReconstructionError ;
155 float _varReconstructionError ;
157 AimsData<float> _errorMatrix ;
158 std::vector<float> _mean ;
160 float _unreconstructedInertia ;
161 int _numberOfSignificantVps ;
166 template <
typename T>
170 PPcaElement(
const std::vector<std::list< Point3d > >& classes,
171 const AimsData<T>& data,
int numberOfSignificantVps,
172 const std::set<int>& constitutedFrom = std::set<int>(),
int number = -1 ) ;
177 const std::vector< std::list< Point3d > >& classes,
178 const AimsData<T>& data,
const AimsData<float>& initDistances ) ;
181 const std::vector< std::list< Point3d > >& classes,
182 const AimsData<T>& data,
const AimsData<float>& initDistances,
int newNb = -1 ) ;
185 aims::ProbabilisticPcaElement*
ppca() {
return _ppcaElement ; }
188 void computeReconstructionError(
const std::vector< std::list< Point3d > >& classes,
189 const AimsData<T>& data ) ;
191 AimsData<double> _meanSignal ;
192 aims::ProbabilisticPcaElement * _ppcaElement ;
194 int _numberOfSignificantVps ;
197 template <
typename T>
206 const std::vector< std::list< Point3d > >& classes,
207 const AimsData<T>& data,
const AimsData<float>& initDistances ) ;
210 const std::vector< std::list< Point3d > >& classes,
211 const AimsData<T>& data,
const AimsData<float>& initDistances,
int newNb = -1 ) ;
216 template <
typename T>
221 const AimsData<double> * maxMomentValueRatios,
222 const AimsData<double> * kinModel2by2Distances,
223 const AimsData<double> * interactionSurf,
224 const std::vector<double> * labelsVolumes,
225 float spatialregularizationWeight,
float timeOfMaximumWeight,
226 float meanDist2By2,
float varDist2By2,
float meanSurfVolRatio,
227 float varSurfVolRatio,
float meanMaxMomentRatio,
float varMaxMomentRatio,
228 const std::set<int>& constitutedFrom = std::set<int>(),
int number = -1 ) :
229 Element<T>( number, 0, constitutedFrom ), _maxMomentValueRatios(maxMomentValueRatios),
230 _kinModel2by2Distances(kinModel2by2Distances),
231 _interactionSurf(interactionSurf), _labelsVolumes(labelsVolumes),
232 _spatialregularizationWeight(spatialregularizationWeight), _timeOfMaximumWeight(timeOfMaximumWeight),
233 _meanDist2By2(meanDist2By2), _varDist2By2(varDist2By2), _meanSurfVolRatio(meanSurfVolRatio),
234 _varSurfVolRatio(varSurfVolRatio), _meanMaxMomentRatio(meanMaxMomentRatio), _varMaxMomentRatio(varMaxMomentRatio)
241 const std::vector< std::list< Point3d > >& classes,
242 const AimsData<T>& data,
const AimsData<float>& initDistances ) ;
245 const std::vector< std::list< Point3d > >& classes,
246 const AimsData<T>& data,
const AimsData<float>& initDistances,
int newNb = -1 ) ;
250 const AimsData<double> * _maxMomentValueRatios ;
251 const AimsData<double> * _kinModel2by2Distances ;
252 const AimsData<double> * _interactionSurf ;
253 const std::vector<double> * _labelsVolumes ;
254 float _spatialregularizationWeight ;
255 float _timeOfMaximumWeight ;
257 float _meanDist2By2 ;
259 float _meanSurfVolRatio ;
260 float _varSurfVolRatio ;
261 float _meanMaxMomentRatio ;
262 float _varMaxMomentRatio ;
265 template <
typename T>
268 CahElementFactory(
const std::vector< std::list< Point3d > >& classes = std::vector< std::list< Point3d > >(),
269 const AimsData<T>& data = AimsData<T>() ) ;
272 virtual Element<T> * creator(
int n )
const = 0 ;
273 virtual std::list< Element<T>* > creator()
const ;
275 virtual std::string methodType()
const = 0 ;
276 const std::vector< std::list< Point3d > >&
classes()
const {
return _classes ; }
277 const AimsData<T>&
data()
const {
return _data ; }
283 const std::vector< std::list< Point3d > >&
_classes ;
287 template <
typename T>
290 BaryCahElementFactory(
const std::vector< std::list< Point3d > >& classes = std::vector< std::list< Point3d > >(),
291 const AimsData<T>& data = AimsData<T>() ) ;
296 virtual std::string
methodType()
const {
return "Barycenter" ;}
300 template <
typename T>
304 const std::vector< std::list< Point3d > >& classes = std::vector< std::list< Point3d > >(),
305 const AimsData<T>& data = AimsData<T>() ) ;
313 int _nbOfSignificantVps ;
316 template <
typename T>
320 const std::vector< std::list< Point3d > >& classes = std::vector< std::list< Point3d > >(),
321 const AimsData<T>& data = AimsData<T>() ) ;
329 int _nbOfSignificantVps ;
332 template <
typename T>
338 virtual std::list< Element<T>* > creator()
const ;
341 virtual std::string
methodType()
const {
return "Max2By2Distance" ;}
348 AimsData<float> _initDistances ;
353 template <
typename T>
357 const std::vector<aims::DiscriminantAnalysisElement*>& classesKinDescription,
358 const AimsData<int>& locMap,
359 const std::vector<short>& unfusionedLabels,
360 const std::vector<float>& classMaximaMoment,
361 float spatialregularizationWeight = 1.,
362 float timeOfMaximumWeight = 0.5 ) ;
365 delete _classMaximumMoment ;
366 delete _maxMomentValueRatios ;
367 delete _antiCorrelatedMeans ;
368 delete _kinModel2by2Distances ;
369 delete _interactionSurf ;
370 delete _labelsVolumes ;
375 virtual std::string
methodType()
const {
return "SCKBDistance" ;}
381 std::vector<float> * _classMaximumMoment ;
382 AimsData<double> * _maxMomentValueRatios ;
383 AimsData<char> * _antiCorrelatedMeans ;
384 AimsData<double> * _kinModel2by2Distances ;
385 AimsData<double> * _interactionSurf ;
386 std::vector<double> * _labelsVolumes ;
387 float _spatialregularizationWeight ;
388 float _timeOfMaximumWeight ;
390 float _meanDist2By2 ;
392 float _meanSurfVolRatio ;
393 float _varSurfVolRatio ;
394 float _meanMaxMomentRatio ;
395 float _varMaxMomentRatio ;
398 template <
typename T>
402 const std::vector< std::list< Point3d > >& classes = std::vector< std::list< Point3d > >(),
403 const AimsData<T>& data = AimsData<T>() ) ;
408 virtual std::string
methodType()
const {
return "PcaReprocReconsError" ;}
411 int _nbOfSignificantVps ;
414 template <
typename T>
425 void initialisationDist();
428 const std::vector< std::pair<Point2d, float> >& doit( ) ;
429 const std::vector< std::pair<Point2d, float> >&
result( ) {
430 if( _result.empty() )
return doit() ;
433 std::vector<Point2d> cut(
const std::vector< std::pair<Point2d, float> >& res,
int );
434 std::vector<Point2d> distanceCut(
const std::vector< std::pair<Point2d, float> >& res,
float );
436 std::vector<Point2d> maxCurvatureCut(
const std::vector< std::pair<Point2d, float> >& res );
438 void save(
const std::string& name ) ;
439 const std::vector< std::pair<Point2d, float> >& load(
const std::string& name ) ;
445 std::vector<int> leaves(
int);
446 std::vector<int> leaves(
float);
447 void Proc(
int, std::vector<int>& );
452 const std::vector< std::list< Point3d > >& _classes ;
453 const AimsData<T>& _data ;
454 std::list<Element<T>*> _listeN;
455 std::multimap<float, Point2d> _mMap;
456 std::vector< std::pair<Point2d, float> > _result;
459 std::vector< std::set<short> > _newAgregatesConstitution ;
460 AimsData<float> _distanceBetweenInitialElements ;
463 bool _canAddElement ;
465 bool _initDistancesAlreadyComputed ;
virtual std::string methodType() const
const std::vector< std::set< short > > & newAgregateConstitution() const
virtual ~SCKBDistanceElement()
virtual ~PcaReprocReconsErrorElement()
const std::vector< float > & baryValue() const
virtual bool initDistanceAlreadyComputed() const
virtual bool initDistanceAlreadyComputed() const
virtual std::string methodType() const
const std::vector< std::list< Point3d > > & _classes
const Point3df & baryPosition() const
virtual std::string methodType() const
float _varReconstructionError
virtual std::string methodType() const
virtual std::string methodType() const
virtual const AimsData< float > * initDistances() const
const std::vector< std::list< Point3d > > & classes() const
std::vector< float > _mean
float _unreconstructedInertia
const std::vector< std::pair< Point2d, float > > & result()
aims::ProbabilisticPcaElement * ppca()
Element(int number, int card, const std::set< int > &constitutedFrom=std::set< int >())
SCKBDistanceElement(const AimsData< double > *maxMomentValueRatios, const AimsData< double > *kinModel2by2Distances, const AimsData< double > *interactionSurf, const std::vector< double > *labelsVolumes, float spatialregularizationWeight, float timeOfMaximumWeight, float meanDist2By2, float varDist2By2, float meanSurfVolRatio, float varSurfVolRatio, float meanMaxMomentRatio, float varMaxMomentRatio, const std::set< int > &constitutedFrom=std::set< int >(), int number=-1)
virtual std::string methodType() const
int _numberOfSignificantVps
const AimsData< float > & errorMatrix()
virtual ~SCKBDistanceCahElementFactory()
std::set< int > _constitutedFrom
virtual bool initDistanceAlreadyComputed() const
const AimsData< T > & data() const
void setNumber(int number)
virtual ~Max2By2DistanceElement()
const std::set< int > & constitutedFrom() const
const AimsData< float > & errorMatrix()
AimsData< float > _errorMatrix
const AimsData< T > & _data
const AimsData< float > * initDistances() const
const AimsData< float > * initDistances() const
float _meanReconstructionError