SHOGUN  6.0.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules
LeastAngleRegression.h
Go to the documentation of this file.
1 /*
2  * This program is free software; you can redistribute it and/or modify
3  * it under the terms of the GNU General Public License as published by
4  * the Free Software Foundation; either version 3 of the License, or
5  * (at your option) any later version.
6  *
7  * Written (W) 2012 Chiyuan Zhang
8  * Copyright (C) 2012 Chiyuan Zhang
9  */
10 
11 #ifndef LEASTANGLEREGRESSION_H__
12 #define LEASTANGLEREGRESSION_H__
13 
14 #include <shogun/lib/config.h>
15 
16 #include <vector>
19 
20 namespace shogun
21 {
22 
23 class CFeatures;
24 
74 {
75 public:
76 
79 
84  CLeastAngleRegression(bool lasso = true);
85 
87  virtual ~CLeastAngleRegression();
88 
93  void set_max_non_zero(int32_t n)
94  {
95  m_max_nonz = n;
96  }
97 
100  int32_t get_max_non_zero() const
101  {
102  return m_max_nonz;
103  }
104 
110  {
111  m_max_l1_norm = norm;
112  }
113 
117  {
118  return m_max_l1_norm;
119  }
120 
126  void switch_w(int32_t num_variable)
127  {
129  REQUIRE(w.vlen > 0,"Please train the model (i.e. run the model's train() method) before updating its weights.\n")
130  REQUIRE(size_t(num_variable) < m_beta_idx.size() && num_variable >= 0,
131  "Cannot switch to an estimator of %d non-zero coefficients.\n", num_variable)
132  if (w.vector == NULL)
133  w = SGVector<float64_t>(w.vlen);
134 
135  std::copy(m_beta_path[m_beta_idx[num_variable]].begin(),
136  m_beta_path[m_beta_idx[num_variable]].end(), w.vector);
137  }
138 
147  int32_t get_path_size() const
148  {
149  return m_beta_idx.size();
150  }
151 
162  {
164  return SGVector<float64_t>(&m_beta_path[m_beta_idx[num_var]][0], w.vlen, false);
165  }
166 
172  {
173  return CT_LARS;
174  }
175 
177  void set_epsilon(float64_t epsilon)
178  {
179  m_epsilon = epsilon;
180  }
181 
184  {
185  return m_epsilon;
186  }
187 
189  virtual const char* get_name() const { return "LeastAngleRegression"; }
190 
191 protected:
201  bool train_machine(CFeatures * data);
202 
203  template <typename ST>
205  const SGMatrix<ST>& X_active, SGMatrix<ST>& R, int32_t i_max_corr, int32_t num_active);
206 
207  template <typename ST>
208  SGMatrix<ST> cholesky_delete(SGMatrix<ST>& R, int32_t i_kick);
209 
210  template <typename ST>
211  static void plane_rot(ST x0, ST x1,
212  ST &y0, ST &y1, SGMatrix<ST> &G);
213 
214  #ifndef SWIG
215  template <typename ST>
216  static void find_max_abs(const std::vector<ST> &vec, const std::vector<bool> &ignore_mask,
217  int32_t &imax, ST& vmax);
218  #endif
219 
220 private:
226  template <typename ST>
227  bool train_machine_templated(CDenseFeatures<ST> * data);
228 
229  void activate_variable(int32_t v)
230  {
231  m_num_active++;
232  m_active_set.push_back(v);
233  m_is_active[v] = true;
234  }
235 
236  void deactivate_variable(int32_t v_idx)
237  {
238  m_num_active--;
239  m_is_active[m_active_set[v_idx]] = false;
240  m_active_set.erase(m_active_set.begin() + v_idx);
241  }
242 
243  bool m_lasso;
244 
245  int32_t m_max_nonz;
246  float64_t m_max_l1_norm;
247 
248  std::vector<std::vector<float64_t> > m_beta_path;
249  std::vector<int32_t> m_beta_idx;
250  std::vector<int32_t> m_active_set;
251  std::vector<bool> m_is_active;
252  int32_t m_num_active;
253  float64_t m_epsilon;
254 }; // class LARS
255 
256 } // namespace shogun
257 
258 #endif // LEASTANGLEREGRESSION_H__
EMachineType
Definition: Machine.h:33
MACHINE_PROBLEM_TYPE(PT_REGRESSION)
SGMatrix< ST > cholesky_delete(SGMatrix< ST > &R, int32_t i_kick)
The class DenseFeatures implements dense feature matrices.
Definition: LDA.h:40
SGMatrix< ST > cholesky_insert(const SGMatrix< ST > &X, const SGMatrix< ST > &X_active, SGMatrix< ST > &R, int32_t i_max_corr, int32_t num_active)
#define REQUIRE(x,...)
Definition: SGIO.h:205
static void find_max_abs(const std::vector< ST > &vec, const std::vector< bool > &ignore_mask, int32_t &imax, ST &vmax)
index_t vlen
Definition: SGVector.h:545
static void plane_rot(ST x0, ST x1, ST &y0, ST &y1, SGMatrix< ST > &G)
virtual EMachineType get_classifier_type()
void switch_w(int32_t num_variable)
double float64_t
Definition: common.h:60
Class for Least Angle Regression, can be used to solve LASSO.
Class LinearMachine is a generic interface for all kinds of linear machines like classifiers.
Definition: LinearMachine.h:63
virtual SGVector< float64_t > get_w() const
void set_max_l1_norm(float64_t norm)
void set_epsilon(float64_t epsilon)
all of classes and functions are contained in the shogun namespace
Definition: class_list.h:18
SGVector< float64_t > get_w_for_var(int32_t num_var)
The class Features is the base class of all feature objects.
Definition: Features.h:68
virtual const char * get_name() const

SHOGUN Machine Learning Toolbox - Documentation