const-fixing functions
[mldemos:baraks-mldemos.git] / _AlgorithmsPlugins / KNN / classifierKNN.h
1 /*********************************************************************\r
2 MLDemos: A User-Friendly visualization toolkit for machine learning\r
3 Copyright (C) 2010  Basilio Noris\r
4 Contact: mldemos@b4silio.com\r
5 \r
6 This library is free software; you can redistribute it and/or\r
7 modify it under the terms of the GNU Lesser General Public License,\r
8 version 3 as published by the Free Software Foundation.\r
9 \r
10 This library is distributed in the hope that it will be useful, but\r
11 WITHOUT ANY WARRANTY; without even the implied warranty of\r
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
13 Lesser General Public License for more details.\r
14 \r
15 You should have received a copy of the GNU Lesser General Public\r
16 License along with this library; if not, write to the Free\r
17 Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\r
18 *********************************************************************/\r
19 #ifndef _CLASSIFIER_KNN_H_\r
20 #define _CLASSIFIER_KNN_H_\r
21 \r
22 #include <vector>\r
23 #include <map>\r
24 #include "classifier.h"\r
25 #include "ANN/ANN.h"\r
26 \r
27 class ClassifierKNN : public Classifier\r
28 {\r
29 private:\r
30         int                                     nPts;                                   // actual number of data points\r
31         ANNpointArray           dataPts;                                // data points\r
32         ANNidxArray                     nnIdx;                                  // near neighbor indices\r
33         ANNdistArray            dists;                                  // near neighbor distances\r
34         ANNkd_tree*                     kdTree;                                 // search structure\r
35         int metricType;\r
36         int metricP;\r
37         int k;\r
38         std::map<int,int> counts;\r
39 public:\r
40     ClassifierKNN(): k(1), nPts(0), dataPts(0), nnIdx(0), dists(0), kdTree(0), metricType(2), metricP(2){bMultiClass = true;}\r
41         ~ClassifierKNN();\r
42     void Train(std::vector< fvec > samples, ivec labels);\r
43     fvec TestMulti(const fvec &sample) const ;\r
44     float Test( const fvec &sample) const ;\r
45     float Test( const fVec &sample) const ;\r
46         void SetParams(u32 k, int metricType, u32 metricP);\r
47     const char *GetInfoString() const ;\r
48 };\r
49 \r
50 #endif // _CLASSIFIER_KNN_H_\r