12#include <Eigen/SparseCore>
37 const Eigen::ArrayXd& lambda,
38 const Eigen::ArrayXd& lambda_prev);
63 virtual std::vector<int>
initialize(
const std::vector<int>& full_set,
64 int alpha_max_ind) = 0;
76 virtual std::vector<int>
screen(Eigen::VectorXd& gradient,
77 const Eigen::ArrayXd& lambda_curr,
78 const Eigen::ArrayXd& lambda_prev,
79 const Eigen::VectorXd& beta,
80 const std::vector<int>& full_set) = 0;
99 const Eigen::VectorXd& beta,
100 const Eigen::ArrayXd& lambda_curr,
101 std::vector<int>& working_set,
102 const Eigen::MatrixXd& x,
103 const Eigen::MatrixXd& residual,
104 const Eigen::VectorXd& x_centers,
105 const Eigen::VectorXd& x_scales,
107 const std::vector<int>& full_set) = 0;
124 const Eigen::VectorXd& beta,
125 const Eigen::ArrayXd& lambda_curr,
126 std::vector<int>& working_set,
127 const Eigen::SparseMatrix<double>& x,
128 const Eigen::MatrixXd& residual,
129 const Eigen::VectorXd& x_centers,
130 const Eigen::VectorXd& x_scales,
132 const std::vector<int>& full_set) = 0;
150 const Eigen::VectorXd& beta,
151 const Eigen::ArrayXd& lambda_curr,
152 std::vector<int>& working_set,
153 const Eigen::Map<Eigen::MatrixXd>& x,
154 const Eigen::MatrixXd& residual,
155 const Eigen::VectorXd& x_centers,
156 const Eigen::VectorXd& x_scales,
158 const std::vector<int>& full_set) = 0;
176 Eigen::VectorXd& gradient,
177 const Eigen::VectorXd& beta,
178 const Eigen::ArrayXd& lambda_curr,
179 std::vector<int>& working_set,
180 const Eigen::Map<Eigen::SparseMatrix<double>>& x,
181 const Eigen::MatrixXd& residual,
182 const Eigen::VectorXd& x_centers,
183 const Eigen::VectorXd& x_scales,
185 const std::vector<int>& full_set) = 0;
205 std::vector<int>
initialize(
const std::vector<int>& full_set,
206 int alpha_max_ind)
override;
208 std::vector<int>
screen(Eigen::VectorXd& gradient,
209 const Eigen::ArrayXd& lambda_curr,
210 const Eigen::ArrayXd& lambda_prev,
211 const Eigen::VectorXd& beta,
212 const std::vector<int>& full_set)
override;
215 const Eigen::VectorXd& beta,
216 const Eigen::ArrayXd& lambda_curr,
217 std::vector<int>& working_set,
218 const Eigen::MatrixXd& x,
219 const Eigen::MatrixXd& residual,
220 const Eigen::VectorXd& x_centers,
221 const Eigen::VectorXd& x_scales,
223 const std::vector<int>& full_set)
override;
226 const Eigen::VectorXd& beta,
227 const Eigen::ArrayXd& lambda_curr,
228 std::vector<int>& working_set,
229 const Eigen::SparseMatrix<double>& x,
230 const Eigen::MatrixXd& residual,
231 const Eigen::VectorXd& x_centers,
232 const Eigen::VectorXd& x_scales,
234 const std::vector<int>& full_set)
override;
237 const Eigen::VectorXd& beta,
238 const Eigen::ArrayXd& lambda_curr,
239 std::vector<int>& working_set,
240 const Eigen::Map<Eigen::MatrixXd>& x,
241 const Eigen::MatrixXd& residual,
242 const Eigen::VectorXd& x_centers,
243 const Eigen::VectorXd& x_scales,
245 const std::vector<int>& full_set)
override;
248 const Eigen::VectorXd& beta,
249 const Eigen::ArrayXd& lambda_curr,
250 std::vector<int>& working_set,
251 const Eigen::Map<Eigen::SparseMatrix<double>>& x,
252 const Eigen::MatrixXd& residual,
253 const Eigen::VectorXd& x_centers,
254 const Eigen::VectorXd& x_scales,
256 const std::vector<int>& full_set)
override;
268 std::vector<int>
initialize(
const std::vector<int>& full_set,
269 int alpha_max_ind)
override;
271 std::vector<int>
screen(Eigen::VectorXd& gradient,
272 const Eigen::ArrayXd& lambda_curr,
273 const Eigen::ArrayXd& lambda_prev,
274 const Eigen::VectorXd& beta,
275 const std::vector<int>& full_set)
override;
278 const Eigen::VectorXd& beta,
279 const Eigen::ArrayXd& lambda_curr,
280 std::vector<int>& working_set,
281 const Eigen::MatrixXd& x,
282 const Eigen::MatrixXd& residual,
283 const Eigen::VectorXd& x_centers,
284 const Eigen::VectorXd& x_scales,
286 const std::vector<int>& full_set)
override;
289 const Eigen::VectorXd& beta,
290 const Eigen::ArrayXd& lambda_curr,
291 std::vector<int>& working_set,
292 const Eigen::Map<Eigen::MatrixXd>& x,
293 const Eigen::MatrixXd& residual,
294 const Eigen::VectorXd& x_centers,
295 const Eigen::VectorXd& x_scales,
297 const std::vector<int>& full_set)
override;
300 const Eigen::VectorXd& beta,
301 const Eigen::ArrayXd& lambda_curr,
302 std::vector<int>& working_set,
303 const Eigen::SparseMatrix<double>& x,
304 const Eigen::MatrixXd& residual,
305 const Eigen::VectorXd& x_centers,
306 const Eigen::VectorXd& x_scales,
308 const std::vector<int>& full_set)
override;
311 const Eigen::VectorXd& beta,
312 const Eigen::ArrayXd& lambda_curr,
313 std::vector<int>& working_set,
314 const Eigen::Map<Eigen::SparseMatrix<double>>& x,
315 const Eigen::MatrixXd& residual,
316 const Eigen::VectorXd& x_centers,
317 const Eigen::VectorXd& x_scales,
319 const std::vector<int>& full_set)
override;
324 template<
typename MatrixType>
325 bool checkKktViolationsImpl(Eigen::VectorXd& gradient,
326 const Eigen::VectorXd& beta,
327 const Eigen::ArrayXd& lambda_curr,
328 std::vector<int>& working_set,
330 const Eigen::MatrixXd& residual,
331 const Eigen::VectorXd& x_centers,
332 const Eigen::VectorXd& x_scales,
334 const std::vector<int>& full_set);
344std::unique_ptr<ScreeningRule>
No screening rule - uses all variables.
std::vector< int > initialize(const std::vector< int > &full_set, int alpha_max_ind) override
Initialize the screening rule at the start of the path algorithm.
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, const std::vector< int > &full_set) override
Check for KKT violations with sparse matrix input.
std::vector< int > screen(Eigen::VectorXd &gradient, const Eigen::ArrayXd &lambda_curr, const Eigen::ArrayXd &lambda_prev, const Eigen::VectorXd &beta, const std::vector< int > &full_set) 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, const std::vector< int > &full_set) 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::Map< Eigen::SparseMatrix< double > > &x, const Eigen::MatrixXd &residual, const Eigen::VectorXd &x_centers, const Eigen::VectorXd &x_scales, JitNormalization jit_normalization, const std::vector< int > &full_set) 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::MatrixXd &x, const Eigen::MatrixXd &residual, const Eigen::VectorXd &x_centers, const Eigen::VectorXd &x_scales, JitNormalization jit_normalization, const std::vector< int > &full_set) override
Check for KKT violations and update working set if necessary.
Base class for screening rules in SLOPE.
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, const std::vector< int > &full_set)=0
Check for KKT violations and update working set if necessary.
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, const std::vector< int > &full_set)=0
Check for KKT violations with sparse matrix input.
std::vector< int > strong_set
Strong set of variables.
virtual ~ScreeningRule()=default
Virtual destructor.
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, const std::vector< int > &full_set)=0
Check for KKT violations with sparse matrix input.
virtual std::vector< int > initialize(const std::vector< int > &full_set, int alpha_max_ind)=0
Initialize the screening rule at the start of the path algorithm.
virtual std::string toString() const =0
Get string representation of the screening rule.
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, const std::vector< int > &full_set)=0
Check for KKT violations with sparse matrix input.
virtual std::vector< int > screen(Eigen::VectorXd &gradient, const Eigen::ArrayXd &lambda_curr, const Eigen::ArrayXd &lambda_prev, const Eigen::VectorXd &beta, const std::vector< int > &full_set)=0
Screen for the next path step.
Implements strong screening rules for SLOPE.
std::vector< int > screen(Eigen::VectorXd &gradient, const Eigen::ArrayXd &lambda_curr, const Eigen::ArrayXd &lambda_prev, const Eigen::VectorXd &beta, const std::vector< int > &full_set) 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::SparseMatrix< double > &x, const Eigen::MatrixXd &residual, const Eigen::VectorXd &x_centers, const Eigen::VectorXd &x_scales, JitNormalization jit_normalization, const std::vector< int > &full_set) 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::Map< Eigen::MatrixXd > &x, const Eigen::MatrixXd &residual, const Eigen::VectorXd &x_centers, const Eigen::VectorXd &x_scales, JitNormalization jit_normalization, const std::vector< int > &full_set) override
Check for KKT violations with sparse matrix input.
std::vector< int > initialize(const std::vector< int > &full_set, 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.
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, const std::vector< int > &full_set) 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, const std::vector< int > &full_set) override
Check for KKT violations and update working set if necessary.
Enums to control predictor standardization behavior.
Namespace containing SLOPE regression implementation.
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.