Learning Curve Plus Plus (LCPP)
kernelridge.h
Go to the documentation of this file.
1 /**
2  * @file kernelridge.h
3  * @author Ozgur Taylan Turan
4  *
5  * Simple Kernelized Ridge Regression & Kernel Regression(Smoothing)
6  *
7  */
8 
9 #ifndef KERNELRIDGE_H
10 #define KERNELRIDGE_H
11 
12 //#include <mlpack/prereqs.hpp>
13 
14 namespace algo {
15 namespace regression {
16 
17 //-----------------------------------------------------------------------------
18 // Kernel Ridge Regression
19 //-----------------------------------------------------------------------------
20 template<class KERNEL, class T=DTYPE>
22 {
23  public:
24 
25  /**
26  * @param inputs X
27  * @param labels y
28  * @param lambda regularization hyper-parameter
29  * @param args for the kernel
30  */
31  template<typename... Ts>
32  KernelRidge ( const arma::Mat<T>& inputs,
33  const arma::Row<T>& labels,
34  const double& lambda,
35  const Ts&... args );
36 
37  template<typename... Ts>
38  KernelRidge ( const arma::Mat<T>& inputs,
39  const arma::Row<T>& labels );
40  /**
41  * Non-working model
42  */
43  template<typename... Ts>
44  KernelRidge ( const Ts&... args ) : cov_(args...), lambda_(0.0) { }
45 
46  /**
47  * @param inputs X
48  * @param labels y
49  */
50  void Train ( const arma::Mat<T>& inputs,
51  const arma::Row<T>& labels );
52 
53  /**
54  * @param inputs X*
55  * @param labels y*
56  */
57  void Predict ( const arma::Mat<T>& inputs,
58  arma::Row<T>& labels ) const;
59 
60  /**
61  * Calculate the L2 squared error
62  *
63  * @param inputs
64  * @param labels
65  */
66  T ComputeError ( const arma::Mat<T>& points,
67  const arma::Row<T>& responses ) const;
68 
69  const arma::Row<T>& Parameters ( ) const { return parameters_; }
70 
71  arma::Row<T>& Parameters ( ) { return parameters_; }
72 
73  double Lambda ( ) const { return lambda_; }
74 
75  double& Lambda ( ) { return lambda_; }
76 
77  /**
78  * Serialize the model.
79  */
80  template<typename Archive>
81  void serialize ( Archive& ar, const unsigned int )
82  {
83  ar ( cereal::make_nvp("parameters",parameters_),
84  cereal::make_nvp("lambda",lambda_),
85  cereal::make_nvp("cov",cov_),
86  cereal::make_nvp("train_inp",train_inp_));
87  }
88 
89  private:
90 
91  arma::Mat<T> train_inp_; // for later usage
92  arma::Row<T> parameters_;
93  data::Gram<KERNEL> cov_;
94  DTYPE lambda_;
95 };
96 
97 //-----------------------------------------------------------------------------
98 // Kernel Regression
99 //-----------------------------------------------------------------------------
100 template<class KERNEL, class T=DTYPE>
101 class Kernel
102 {
103  public:
104 
105  /**
106  * @param inputs X
107  * @param labels y
108  * @param args for the kernel
109  */
110  template<typename... Ts>
111  Kernel ( const arma::Mat<T>& inputs,
112  const arma::Row<T>& labels,
113  const Ts&... args );
114 
115  /**
116  * Non-working model
117  */
118  template<typename... Ts>
119  Kernel ( const Ts&... args ) : cov_(args...){ }
120 
121  /**
122  * @param inputs X
123  * @param labels y
124  * @param args for the kernel
125  */
126  void Train ( const arma::Mat<T>& inputs,
127  const arma::Row<T>& labels );
128 
129  /**
130  * @param inputs X*
131  * @param labels y*
132  */
133  void Predict ( const arma::Mat<T>& inputs,
134  arma::Row<T>& labels ) const;
135 
136  /**
137  * Calculate the L2 squared error
138  *
139  * @param inputs
140  * @param labels
141  */
142  T ComputeError ( const arma::Mat<T>& points,
143  const arma::Row<T>& responses) const;
144 
145  /**
146  * Serialize the model.
147  */
148  template<typename Archive>
149  void serialize ( Archive& ar, const unsigned int /* version */ )
150  {
151  ar (cereal::make_nvp("train_inp",train_inp_),
152  cereal::make_nvp("train_lab",train_lab_),
153  cereal::make_nvp("cov",cov_));
154  }
155 
156  private:
157  arma::Mat<T> train_inp_;
158  arma::Row<T> train_lab_;
159  data::Gram<KERNEL> cov_;
160 };
161 
162 //-----------------------------------------------------------------------------
163 // Semi-Parametric Kernel Regression with Mean addition
164 //-----------------------------------------------------------------------------
165 template<class KERNEL, class FUNC, class T=DTYPE>
167 {
168  public:
169 
170  /**
171  * @param inputs : X
172  * @param labels : y
173  * @param lambda : regularization hyper-parameter
174  * @param num_funcs : number of \psi
175  * @param args : for the kernel hyper-parameters
176  */
177  template<class... Ts>
178  SemiParamKernelRidge ( const arma::Mat<T>& inputs,
179  const arma::Row<T>& labels,
180  const T lambda ,
181  const size_t num_funcs,
182  const Ts&... args );
183  template<class... Ts>
184  SemiParamKernelRidge ( const arma::Mat<T>& inputs,
185  const arma::Row<T>& labels,
186  const T lambda ,
187  const T perc,
188  const Ts&... args );
189  /**
190  * Non-working model
191  */
192  template<typename... Ts>
193  SemiParamKernelRidge ( const Ts&... args ) : cov_(args...),
194  lambda_(0.0),
195  M_(size_t(0)),
196  perc_(T(0)),
197  func_(size_t(0)) { }
198 
199  /**
200  * @param inputs X
201  * @param labels y
202  */
203  void Train ( const arma::Mat<T>& inputs,
204  const arma::Row<T>& labels );
205  /**
206  * @param inputs X*
207  * @param labels y*
208  */
209  void Predict ( const arma::Mat<T>& inputs,
210  arma::Row<T>& labels );// const;
211  /**
212  * Calculate the L2 squared error
213  *
214  * @param inputs
215  * @param labels
216  */
217  T ComputeError ( const arma::Mat<T>& points,
218  const arma::Row<T>& responses ); //const;
219 
220  const arma::Row<T>& Parameters() const { return parameters_; }
221 
222  arma::Row<T>& Parameters() { return parameters_; }
223 
224  T Lambda() const { return lambda_; }
225 
226  T& Lambda() { return lambda_; }
227 
228  /**
229  * Serialize the model.
230  */
231  template<typename Archive>
232  void serialize(Archive& ar, const unsigned int /* version */)
233  {
234  ar ( cereal::make_nvp("parameters",parameters_),
235  cereal::make_nvp("M",M_),
236  cereal::make_nvp("N",N_),
237  cereal::make_nvp("lambda",lambda_),
238  cereal::make_nvp("cov",cov_),
239  cereal::make_nvp("func",func_),
240  cereal::make_nvp("perc",perc_),
241  cereal::make_nvp("train_inp",train_inp_) );
242  }
243 
244  private:
245 
246  arma::Mat<T> train_inp_; // for later usage
247  arma::Row<T> parameters_;
248  arma::Mat<T> psi_;
249  data::Gram<KERNEL> cov_;
250  T lambda_;
251  size_t M_;
252  T perc_;
253  size_t N_;
254  FUNC func_;
255 
256 };
257 
258 
259 } // namespace regression
260 } // namespace algo
261 
262 #include "kernelridge_impl.h"
263 
264 #endif
265 
KernelRidge(const arma::Mat< T > &inputs, const arma::Row< T > &labels, const double &lambda, const Ts &... args)
KernelRidge(const Ts &... args)
Definition: kernelridge.h:44
T ComputeError(const arma::Mat< T > &points, const arma::Row< T > &responses) const
void Predict(const arma::Mat< T > &inputs, arma::Row< T > &labels) const
void serialize(Archive &ar, const unsigned int)
Definition: kernelridge.h:81
void Train(const arma::Mat< T > &inputs, const arma::Row< T > &labels)
T ComputeError(const arma::Mat< T > &points, const arma::Row< T > &responses) const
void Train(const arma::Mat< T > &inputs, const arma::Row< T > &labels)
void serialize(Archive &ar, const unsigned int)
Definition: kernelridge.h:149
Kernel(const arma::Mat< T > &inputs, const arma::Row< T > &labels, const Ts &... args)
Kernel(const Ts &... args)
Definition: kernelridge.h:119
void Predict(const arma::Mat< T > &inputs, arma::Row< T > &labels) const
void Predict(const arma::Mat< T > &inputs, arma::Row< T > &labels)
void Train(const arma::Mat< T > &inputs, const arma::Row< T > &labels)
void serialize(Archive &ar, const unsigned int)
Definition: kernelridge.h:232
SemiParamKernelRidge(const arma::Mat< T > &inputs, const arma::Row< T > &labels, const T lambda, const size_t num_funcs, const Ts &... args)
T ComputeError(const arma::Mat< T > &points, const arma::Row< T > &responses)
SemiParamKernelRidge(const Ts &... args)
Definition: kernelridge.h:193