slope 6.5.4
Loading...
Searching...
No Matches
screening.h
Go to the documentation of this file.
1
9#pragma once
10
11#include "jit_normalization.h"
12#include <Eigen/SparseCore>
13#include <memory>
14#include <vector>
15
16namespace slope {
17
24std::vector<int>
25activeSet(const Eigen::VectorXd& beta);
26
35std::vector<int>
36strongSet(const Eigen::VectorXd& gradient_prev,
37 const Eigen::ArrayXd& lambda,
38 const Eigen::ArrayXd& lambda_prev);
39
48{
49public:
53 virtual ~ScreeningRule() = default;
54
63 virtual std::vector<int> initialize(int feature_count, int alpha_max_ind) = 0;
64
74 virtual void screen(std::vector<int>& working_set,
75 Eigen::VectorXd& gradient,
76 const Eigen::ArrayXd& lambda_curr,
77 const Eigen::ArrayXd& lambda_prev,
78 const Eigen::VectorXd& beta) = 0;
79
95 virtual bool checkKktViolations(Eigen::VectorXd& gradient,
96 const Eigen::VectorXd& beta,
97 const Eigen::ArrayXd& lambda_curr,
98 std::vector<int>& working_set,
99 const Eigen::MatrixXd& x,
100 const Eigen::MatrixXd& residual,
101 const Eigen::VectorXd& x_centers,
102 const Eigen::VectorXd& x_scales,
103 JitNormalization jit_normalization) = 0;
118 virtual bool checkKktViolations(Eigen::VectorXd& gradient,
119 const Eigen::VectorXd& beta,
120 const Eigen::ArrayXd& lambda_curr,
121 std::vector<int>& working_set,
122 const Eigen::SparseMatrix<double>& x,
123 const Eigen::MatrixXd& residual,
124 const Eigen::VectorXd& x_centers,
125 const Eigen::VectorXd& x_scales,
126 JitNormalization jit_normalization) = 0;
127
142 virtual bool checkKktViolations(Eigen::VectorXd& gradient,
143 const Eigen::VectorXd& beta,
144 const Eigen::ArrayXd& lambda_curr,
145 std::vector<int>& working_set,
146 const Eigen::Map<Eigen::MatrixXd>& x,
147 const Eigen::MatrixXd& residual,
148 const Eigen::VectorXd& x_centers,
149 const Eigen::VectorXd& x_scales,
150 JitNormalization jit_normalization) = 0;
151
166 virtual bool checkKktViolations(
167 Eigen::VectorXd& gradient,
168 const Eigen::VectorXd& beta,
169 const Eigen::ArrayXd& lambda_curr,
170 std::vector<int>& working_set,
171 const Eigen::Map<Eigen::SparseMatrix<double>>& x,
172 const Eigen::MatrixXd& residual,
173 const Eigen::VectorXd& x_centers,
174 const Eigen::VectorXd& x_scales,
175 JitNormalization jit_normalization) = 0;
176
181 virtual std::string toString() const = 0;
182
183protected:
185 std::vector<int> strong_set;
186};
187
193{
194public:
195 std::vector<int> initialize(int feature_count, int alpha_max_ind) override;
196
197 void screen(std::vector<int>& working_set,
198 Eigen::VectorXd& gradient,
199 const Eigen::ArrayXd& lambda_curr,
200 const Eigen::ArrayXd& lambda_prev,
201 const Eigen::VectorXd& beta) override;
202
203 bool checkKktViolations(Eigen::VectorXd& gradient,
204 const Eigen::VectorXd& beta,
205 const Eigen::ArrayXd& lambda_curr,
206 std::vector<int>& working_set,
207 const Eigen::MatrixXd& x,
208 const Eigen::MatrixXd& residual,
209 const Eigen::VectorXd& x_centers,
210 const Eigen::VectorXd& x_scales,
211 JitNormalization jit_normalization) override;
212
213 bool checkKktViolations(Eigen::VectorXd& gradient,
214 const Eigen::VectorXd& beta,
215 const Eigen::ArrayXd& lambda_curr,
216 std::vector<int>& working_set,
217 const Eigen::SparseMatrix<double>& x,
218 const Eigen::MatrixXd& residual,
219 const Eigen::VectorXd& x_centers,
220 const Eigen::VectorXd& x_scales,
221 JitNormalization jit_normalization) override;
222
223 bool checkKktViolations(Eigen::VectorXd& gradient,
224 const Eigen::VectorXd& beta,
225 const Eigen::ArrayXd& lambda_curr,
226 std::vector<int>& working_set,
227 const Eigen::Map<Eigen::MatrixXd>& x,
228 const Eigen::MatrixXd& residual,
229 const Eigen::VectorXd& x_centers,
230 const Eigen::VectorXd& x_scales,
231 JitNormalization jit_normalization) override;
232
233 bool checkKktViolations(Eigen::VectorXd& gradient,
234 const Eigen::VectorXd& beta,
235 const Eigen::ArrayXd& lambda_curr,
236 std::vector<int>& working_set,
237 const Eigen::Map<Eigen::SparseMatrix<double>>& x,
238 const Eigen::MatrixXd& residual,
239 const Eigen::VectorXd& x_centers,
240 const Eigen::VectorXd& x_scales,
241 JitNormalization jit_normalization) override;
242
243 std::string toString() const override;
244};
245
251{
252public:
253 std::vector<int> initialize(int feature_count, int alpha_max_ind) override;
254
255 void screen(std::vector<int>& working_set,
256 Eigen::VectorXd& gradient,
257 const Eigen::ArrayXd& lambda_curr,
258 const Eigen::ArrayXd& lambda_prev,
259 const Eigen::VectorXd& beta) override;
260
261 bool checkKktViolations(Eigen::VectorXd& gradient,
262 const Eigen::VectorXd& beta,
263 const Eigen::ArrayXd& lambda_curr,
264 std::vector<int>& working_set,
265 const Eigen::MatrixXd& x,
266 const Eigen::MatrixXd& residual,
267 const Eigen::VectorXd& x_centers,
268 const Eigen::VectorXd& x_scales,
269 JitNormalization jit_normalization) override;
270
271 bool checkKktViolations(Eigen::VectorXd& gradient,
272 const Eigen::VectorXd& beta,
273 const Eigen::ArrayXd& lambda_curr,
274 std::vector<int>& working_set,
275 const Eigen::Map<Eigen::MatrixXd>& x,
276 const Eigen::MatrixXd& residual,
277 const Eigen::VectorXd& x_centers,
278 const Eigen::VectorXd& x_scales,
279 JitNormalization jit_normalization) override;
280
281 bool checkKktViolations(Eigen::VectorXd& gradient,
282 const Eigen::VectorXd& beta,
283 const Eigen::ArrayXd& lambda_curr,
284 std::vector<int>& working_set,
285 const Eigen::SparseMatrix<double>& x,
286 const Eigen::MatrixXd& residual,
287 const Eigen::VectorXd& x_centers,
288 const Eigen::VectorXd& x_scales,
289 JitNormalization jit_normalization) override;
290
291 bool checkKktViolations(Eigen::VectorXd& gradient,
292 const Eigen::VectorXd& beta,
293 const Eigen::ArrayXd& lambda_curr,
294 std::vector<int>& working_set,
295 const Eigen::Map<Eigen::SparseMatrix<double>>& x,
296 const Eigen::MatrixXd& residual,
297 const Eigen::VectorXd& x_centers,
298 const Eigen::VectorXd& x_scales,
299 JitNormalization jit_normalization) override;
300
301 std::string toString() const override;
302
303private:
304 template<typename MatrixType>
305 bool checkKktViolationsImpl(Eigen::VectorXd& gradient,
306 const Eigen::VectorXd& beta,
307 const Eigen::ArrayXd& lambda_curr,
308 std::vector<int>& working_set,
309 const MatrixType& x,
310 const Eigen::MatrixXd& residual,
311 const Eigen::VectorXd& x_centers,
312 const Eigen::VectorXd& x_scales,
313 JitNormalization jit_normalization);
314};
315
323std::unique_ptr<ScreeningRule>
324createScreeningRule(const std::string& screening_type);
325
326} // namespace slope
No screening rule - uses all variables.
Definition screening.h:193
bool checkKktViolations(Eigen::VectorXd &gradient, const Eigen::VectorXd &beta, const Eigen::ArrayXd &lambda_curr, std::vector< int > &working_set, const Eigen::Map< Eigen::SparseMatrix< double > > &x, const Eigen::MatrixXd &residual, const Eigen::VectorXd &x_centers, const Eigen::VectorXd &x_scales, JitNormalization jit_normalization) override
Check for KKT violations with sparse matrix input.
bool checkKktViolations(Eigen::VectorXd &gradient, const Eigen::VectorXd &beta, const Eigen::ArrayXd &lambda_curr, std::vector< int > &working_set, const Eigen::SparseMatrix< double > &x, const Eigen::MatrixXd &residual, const Eigen::VectorXd &x_centers, const Eigen::VectorXd &x_scales, JitNormalization jit_normalization) override
Check for KKT violations with sparse matrix input.
std::vector< int > initialize(int feature_count, int alpha_max_ind) override
Initialize the screening rule at the start of the path algorithm.
std::string toString() const override
Get string representation of the screening rule.
void screen(std::vector< int > &working_set, Eigen::VectorXd &gradient, const Eigen::ArrayXd &lambda_curr, const Eigen::ArrayXd &lambda_prev, const Eigen::VectorXd &beta) override
Screen for the next path step.
bool checkKktViolations(Eigen::VectorXd &gradient, const Eigen::VectorXd &beta, const Eigen::ArrayXd &lambda_curr, std::vector< int > &working_set, const Eigen::Map< Eigen::MatrixXd > &x, const Eigen::MatrixXd &residual, const Eigen::VectorXd &x_centers, const Eigen::VectorXd &x_scales, JitNormalization jit_normalization) override
Check for KKT violations with sparse matrix input.
bool checkKktViolations(Eigen::VectorXd &gradient, const Eigen::VectorXd &beta, const Eigen::ArrayXd &lambda_curr, std::vector< int > &working_set, const Eigen::MatrixXd &x, const Eigen::MatrixXd &residual, const Eigen::VectorXd &x_centers, const Eigen::VectorXd &x_scales, JitNormalization jit_normalization) override
Check for KKT violations and update working set if necessary.
Base class for screening rules in SLOPE.
Definition screening.h:48
virtual bool checkKktViolations(Eigen::VectorXd &gradient, const Eigen::VectorXd &beta, const Eigen::ArrayXd &lambda_curr, std::vector< int > &working_set, const Eigen::Map< Eigen::SparseMatrix< double > > &x, const Eigen::MatrixXd &residual, const Eigen::VectorXd &x_centers, const Eigen::VectorXd &x_scales, JitNormalization jit_normalization)=0
Check for KKT violations with sparse matrix input.
std::vector< int > strong_set
Strong set of variables.
Definition screening.h:185
virtual bool checkKktViolations(Eigen::VectorXd &gradient, const Eigen::VectorXd &beta, const Eigen::ArrayXd &lambda_curr, std::vector< int > &working_set, const Eigen::SparseMatrix< double > &x, const Eigen::MatrixXd &residual, const Eigen::VectorXd &x_centers, const Eigen::VectorXd &x_scales, JitNormalization jit_normalization)=0
Check for KKT violations with sparse matrix input.
virtual std::vector< int > initialize(int feature_count, int alpha_max_ind)=0
Initialize the screening rule at the start of the path algorithm.
virtual bool checkKktViolations(Eigen::VectorXd &gradient, const Eigen::VectorXd &beta, const Eigen::ArrayXd &lambda_curr, std::vector< int > &working_set, const Eigen::Map< Eigen::MatrixXd > &x, const Eigen::MatrixXd &residual, const Eigen::VectorXd &x_centers, const Eigen::VectorXd &x_scales, JitNormalization jit_normalization)=0
Check for KKT violations with sparse matrix input.
virtual ~ScreeningRule()=default
Virtual destructor.
virtual void screen(std::vector< int > &working_set, Eigen::VectorXd &gradient, const Eigen::ArrayXd &lambda_curr, const Eigen::ArrayXd &lambda_prev, const Eigen::VectorXd &beta)=0
Screen for the next path step.
virtual bool checkKktViolations(Eigen::VectorXd &gradient, const Eigen::VectorXd &beta, const Eigen::ArrayXd &lambda_curr, std::vector< int > &working_set, const Eigen::MatrixXd &x, const Eigen::MatrixXd &residual, const Eigen::VectorXd &x_centers, const Eigen::VectorXd &x_scales, JitNormalization jit_normalization)=0
Check for KKT violations and update working set if necessary.
virtual std::string toString() const =0
Get string representation of the screening rule.
Implements strong screening rules for SLOPE.
Definition screening.h:251
bool checkKktViolations(Eigen::VectorXd &gradient, const Eigen::VectorXd &beta, const Eigen::ArrayXd &lambda_curr, std::vector< int > &working_set, const Eigen::Map< Eigen::SparseMatrix< double > > &x, const Eigen::MatrixXd &residual, const Eigen::VectorXd &x_centers, const Eigen::VectorXd &x_scales, JitNormalization jit_normalization) override
Check for KKT violations with sparse matrix input.
std::string toString() const override
Get string representation of the screening rule.
bool checkKktViolations(Eigen::VectorXd &gradient, const Eigen::VectorXd &beta, const Eigen::ArrayXd &lambda_curr, std::vector< int > &working_set, const Eigen::Map< Eigen::MatrixXd > &x, const Eigen::MatrixXd &residual, const Eigen::VectorXd &x_centers, const Eigen::VectorXd &x_scales, JitNormalization jit_normalization) override
Check for KKT violations with sparse matrix input.
bool checkKktViolations(Eigen::VectorXd &gradient, const Eigen::VectorXd &beta, const Eigen::ArrayXd &lambda_curr, std::vector< int > &working_set, const Eigen::SparseMatrix< double > &x, const Eigen::MatrixXd &residual, const Eigen::VectorXd &x_centers, const Eigen::VectorXd &x_scales, JitNormalization jit_normalization) override
Check for KKT violations with sparse matrix input.
bool checkKktViolations(Eigen::VectorXd &gradient, const Eigen::VectorXd &beta, const Eigen::ArrayXd &lambda_curr, std::vector< int > &working_set, const Eigen::MatrixXd &x, const Eigen::MatrixXd &residual, const Eigen::VectorXd &x_centers, const Eigen::VectorXd &x_scales, JitNormalization jit_normalization) override
Check for KKT violations and update working set if necessary.
std::vector< int > initialize(int feature_count, int alpha_max_ind) override
Initialize the screening rule at the start of the path algorithm.
void screen(std::vector< int > &working_set, Eigen::VectorXd &gradient, const Eigen::ArrayXd &lambda_curr, const Eigen::ArrayXd &lambda_prev, const Eigen::VectorXd &beta) override
Screen for the next path step.
Enums to control predictor standardization behavior.
Namespace containing SLOPE regression implementation.
Definition clusters.h:11
std::unique_ptr< ScreeningRule > createScreeningRule(const std::string &screening_type)
Creates a screening rule based on the provided type.
JitNormalization
Enums to control predictor standardization behavior.
std::vector< int > strongSet(const Eigen::VectorXd &gradient_prev, const Eigen::ArrayXd &lambda, const Eigen::ArrayXd &lambda_prev)
Determines the strong set using sequential strong rules.
std::vector< int > activeSet(const Eigen::VectorXd &beta)
Identifies previously active variables.