const-fixing functions
[mldemos:baraks-mldemos.git] / _AlgorithmsPlugins / Projections / classifierLinear.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_LINEAR_H_\r
20 #define _CLASSIFIER_LINEAR_H_\r
21 \r
22 #include <vector>\r
23 #include <mymaths.h>\r
24 #include "classifier.h"\r
25 #include "basicMath.h"\r
26 \r
27 /**\r
28  * @brief Linear Projections with Naive Bayes Classification\r
29  *\r
30  */\r
31 class ClassifierLinear : public Classifier\r
32 {\r
33 private:\r
34         fvec meanAll, meanPos, meanNeg; /**< TODO */\r
35         int linearType; /**< TODO */\r
36         fVec W; /**< TODO */\r
37         int threshold; /**< TODO */\r
38         double* Transf; /**< TODO */\r
39     float minResponse, maxResponse, midResponse;\r
40     std::vector<fvec> projected;\r
41 \r
42         /**\r
43          * @brief Take the input samples and return its mean and covariance\r
44          *\r
45          * @param samples\r
46          * @param mean\r
47          * @param covar\r
48          */\r
49         void GetCovariance(const std::vector<fvec> &samples, const fvec &mean, float ***covar);\r
50         /**\r
51          * @brief Perform Principal Component Analysis on the input samples, and store the obtained components in W\r
52          *\r
53          * @param samples\r
54          * @param labels\r
55          */\r
56         void TrainPCA(std::vector< fvec > samples, const ivec &labels);\r
57         /**\r
58          * @brief Perform Linear Discriminant Analysis on the input samples, and store the obtained components in W\r
59          *\r
60          * @param samples\r
61          * @param labels\r
62          * @param bFisher Use Fisher-LDA instead of standard LDA\r
63          */\r
64     void TrainLDA(std::vector< fvec > samples, const ivec &labels, int LDAType=0);\r
65         /**\r
66          * @brief Perform Independent Component Analysis on the input samples, and store the obtained components in Transf\r
67          *\r
68          * @param samples\r
69          * @param labels\r
70          */\r
71         void TrainICA(std::vector< fvec > samples, const ivec &labels);\r
72 \r
73 public:\r
74         /**\r
75          * @brief Default Constructor\r
76          *\r
77          */\r
78     ClassifierLinear() : threshold(0), linearType(0), Transf(0) {bUsesDrawTimer = false;}\r
79     ~ClassifierLinear();\r
80         /**\r
81          * @brief Perform the training, by gather the training parameters from the ui, and then training the corresponding classifier\r
82          *\r
83          * @param samples\r
84          * @param labels\r
85          */\r
86         void Train(std::vector< fvec > samples, ivec labels);\r
87         /**\r
88          * @brief Test a single sample using the current method selected\r
89          *\r
90          * @param sample\r
91          */\r
92     float Test(const fvec &sample) const ;\r
93         /**\r
94          * @brief Get the algorithm information and statistics to be displayed in the main interface\r
95          *\r
96          */\r
97     const char *GetInfoString() const ;\r
98         /**\r
99          * @brief Project the input sample into local space\r
100          *\r
101          * @param sample\r
102          */\r
103     fvec Project(const fvec &sample) const ;\r
104         /**\r
105          * @brief Set the algorithm parameters from the ui\r
106          *\r
107          * @param linearType\r
108          */\r
109     void SetParams( const u32 linearType);\r
110         /**\r
111          * @brief Get the current mean for the positive or negative class\r
112          *\r
113          * @param positive\r
114          * @return fvec\r
115          */\r
116     fvec GetMean(const bool positive=true) const {return positive ? meanPos : meanNeg;}\r
117         /**\r
118          * @brief\r
119          *\r
120          * @return fVec\r
121          */\r
122     fVec GetW() const {return W;}\r
123         /**\r
124          * @brief\r
125          *\r
126          * @return int\r
127          */\r
128     int GetType() const {return linearType;}\r
129 };\r
130 \r
131 #endif // _CLASSIFIER_LINEAR_H_\r