Learning Curve Plus Plus (LCPP)
nonparamclass.h
Go to the documentation of this file.
1 /**
2  * @file nonparamclass.h
3  * @author Ozgur Taylan Turan
4  *
5  * Nonarametric Classifiers
6  *
7  */
8 
9 #ifndef NONPARAMCLASS_H
10 #define NONPARAMCLASS_H
11 
12 namespace algo {
13 namespace classification {
14 
15 //-----------------------------------------------------------------------------
16 // Nearest Neighbour Classifier
17 //-----------------------------------------------------------------------------
18 template<class T=DTYPE>
19 class NNC
20 {
21  public:
22 
23  /**
24  * Non-working model
25  */
26  NNC ( ) : k_(1) { };
27 
28  /**
29  * @param r : radius
30  */
31  NNC ( const size_t& k ) : k_(k) { } ;
32 
33  /**
34  * @param inputs : X
35  * @param labels : y
36  * @param num_class : number of classes
37  * @param r : radius
38  */
39  NNC ( const arma::Mat<T>& inputs,
40  const arma::Row<size_t>& labels,
41  const size_t& num_class,
42  const size_t& k );
43 
44  /**
45  * @param inputs : X
46  * @param labels : y
47  */
48 
49  NNC ( const arma::Mat<T>& inputs,
50  const arma::Row<size_t>& labels,
51  const size_t& num_class );
52 
53  /**
54  * @param inputs : X
55  * @param labels : y
56  */
57  void Train ( const arma::Mat<T>& inputs,
58  const arma::Row<size_t>& labels );
59 
60  /**
61  * @param inputs : X
62  * @param labels : y
63  * @param num_class : number of classes
64  */
65  void Train ( const arma::Mat<T>& inputs,
66  const arma::Row<size_t>& labels,
67  const size_t num_class );
68 
69  /**
70  * @param inputs : X*
71  * @param labels : y*
72  */
73  void Classify ( const arma::Mat<T>& inputs,
74  arma::Row<size_t>& labels ) const;
75  /**
76  * @param inputs : X*
77  * @param labels : y*
78  * @param probs : probabilties per class
79  */
80  void Classify ( const arma::Mat<T>& inputs,
81  arma::Row<size_t>& labels,
82  arma::Mat<T>& probs ) const;
83  /**
84  * Calculate the Error Rate
85  *
86  * @param inputs : X*
87  * @param labels : y*
88  */
89  T ComputeError ( const arma::Mat<T>& points,
90  const arma::Row<size_t>& responses ) const;
91  /**
92  * Calculate the Accuracy
93  *
94  * @param inputs : X*
95  * @param labels : y*
96  *
97  */
98  T ComputeAccuracy ( const arma::Mat<T>& points,
99  const arma::Row<size_t>& responses ) const;
100 
101  /**
102  * Serialize the model.
103  */
104  template<typename Archive>
105  void serialize ( Archive& ar,
106  const unsigned int /* version */ )
107  {
108  ar ( cereal::make_nvp("dim",dim_),
109  cereal::make_nvp("nuclass",nuclass_),
110  cereal::make_nvp("nclass",nclass_),
111  cereal::make_nvp("size",size_),
112  cereal::make_nvp("unique",unique_),
113  cereal::make_nvp("k",k_),
114  cereal::make_nvp("inputs",inputs_),
115  cereal::make_nvp("labels",labels_) );
116 
117  }
118 
119  private:
120 
121  size_t k_; // number of neighbours
122  size_t dim_; // number of features
123  size_t size_; // number of training samples
124  size_t nclass_;// number of classes present
125  size_t nuclass_; // number of unique classes observed
126 
127  arma::Row<size_t> unique_; // unique classes
128 
129 
130  arma::Mat<T> inputs_; // inputs
131  arma::Row<size_t> labels_; // labels
132 
133 };
134 
135 } // namespace classification
136 } // namespace algo
137 
138 #include "nonparamclass_impl.h"
139 
140 #endif
141 
NNC(const size_t &k)
Definition: nonparamclass.h:31
void serialize(Archive &ar, const unsigned int)
void Train(const arma::Mat< T > &inputs, const arma::Row< size_t > &labels)
void Classify(const arma::Mat< T > &inputs, arma::Row< size_t > &labels) const
T ComputeAccuracy(const arma::Mat< T > &points, const arma::Row< size_t > &responses) const
T ComputeError(const arma::Mat< T > &points, const arma::Row< size_t > &responses) const