123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- /**
- * @file KernelClassifier.h
- * @brief classifier interface for kernel based methods
- * @author Erik Rodner
- * @date 12/02/2009
- */
- #ifndef KERNELCLASSIFIERINCLUDE
- #define KERNELCLASSIFIERINCLUDE
- #include "vislearning/math/kernels/Kernel.h"
- #include "vislearning/math/kernels/KernelData.h"
- #include "core/vector/VVector.h"
- #include "vislearning/cbaselib/ClassificationResult.h"
- #include "vislearning/cbaselib/LabeledSet.h"
- #include "vislearning/classifier/classifierbase/VecClassifier.h"
- namespace OBJREC
- {
- /** classifier interface for kernel based methods */
- class KernelClassifier : public VecClassifier
- {
- public:
- enum
- {
- KERNELCLASSIFIER_NORMALIZATION_EUCLIDEAN = 0,
- KERNELCLASSIFIER_NORMALIZATION_NONE
- };
- protected:
- /** This variable might be NULL, if you do not specify a kernel function */
- Kernel *kernelFunction;
- /** This is the training set, if you specify a kernel function */
- NICE::VVector vecSet;
- /** These are the labels of the training set, if you specify a kernel function */
- NICE::Vector vecSetLabels;
- /** Maybe you want to normalize feature vectors before training */
- int normalizationType;
- /** stored config to initialize KernelData with noiseSigma, cholesky method etc. */
- NICE::Config conf;
- public:
- /** simple constructor */
- KernelClassifier() {};
- /** specify a kernel function which works on vectors and a normalization method ( use the enum defined in KernelClassifier ) */
- KernelClassifier ( const NICE::Config *conf, Kernel *kernelFunction = NULL, int normalizationType = KERNELCLASSIFIER_NORMALIZATION_EUCLIDEAN );
- /** copy constructor which you should also call in subclasses */
- KernelClassifier ( const KernelClassifier & src );
- /** simple destructor */
- virtual ~KernelClassifier();
- // interface function
- /** teach the classifier with a kernel matrix and the corresponding class labels @param y ! */
- virtual void teach ( KernelData *kernelData, const NICE::Vector & y ) = 0;
- /** classify an example by using its kernel values with the training set,
- be careful with the order in @param kernelVector */
- virtual ClassificationResult classifyKernel ( const NICE::Vector & kernelVector, double kernelSelf ) const = 0;
- // functions to build an interface to VecClassifier
- /** classify using simple vector, this works only if you specify a kernel function */
- ClassificationResult classify ( const NICE::Vector & x ) const;
- /** teach classifier with a labeled set of feature vectors, this works only if you specify a kernel function */
- virtual void teach ( const LabeledSetVector & teachSet );
- /** calculate classifier stuff as the last training step, pretty useless, deprecated */
- void finishTeaching() {};
- /** clone this object */
- KernelClassifier *clone ( void ) const
- {
- fthrow ( NICE::Exception, "clone() not yet implemented." );
- }
- Kernel *getKernelFunction () const
- {
- return kernelFunction;
- };
- virtual void restore ( std::istream&, int );
- virtual void store ( std::ostream&, int ) const;
- };
- }
- #endif
|