00001
00002
00003 #ifndef MSVQ_H
00004 #define MSVQ_H
00005
00006 #include "kmeans.h"
00007 #include "Object.h"
00008 #include <vector>
00009
00010 namespace FD {
00011
00013 class MSVQ : public VQ {
00014 protected:
00015 std::vector<int> stagesSizes;
00016 std::vector<KMeans> stages;
00017 public:
00018 MSVQ(float (*_dist)(const float *, const float*, int) = KMeans::euclidian)
00019 : VQ(_dist)
00020 {}
00021 MSVQ(const std::vector<int> &_stagesSizes, float (*_dist)(const float *, const float*, int) = KMeans::euclidian);
00022
00023 int ID2Vec(const std::vector<int> &vec) const;
00024
00025 std::vector<int> Vec2ID(int ID) const;
00026
00027 int nbClasses() const;
00028
00029 int nbStages() const {return stagesSizes.size();}
00030
00031
00032
00033 void train (const std::vector<float *> &data, int len, bool binary=false);
00034
00035 int getClassID (const float *v, float *dist_return = NULL) const;
00036
00037
00038
00039 void printOn(std::ostream &out=std::cout) const;
00040 void readFrom (std::istream &in=std::cin);
00041 friend std::istream &operator >> (std::istream &in, MSVQ &mdl);
00042 };
00043
00044 }
00045 #endif