12#include <Eigen/SparseCore>
37 const Eigen::ArrayXd& lambda,
38 const Eigen::ArrayXd& lambda_prev);
63 virtual std::vector<int>
initialize(
int feature_count,
int alpha_max_ind) = 0;
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;
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,
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,
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,
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,
195 std::vector<int>
initialize(
int feature_count,
int alpha_max_ind)
override;
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;
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,
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,
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,
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,
253 std::vector<int>
initialize(
int feature_count,
int alpha_max_ind)
override;
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;
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,
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,
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,
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,
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,
310 const Eigen::MatrixXd& residual,
311 const Eigen::VectorXd& x_centers,
312 const Eigen::VectorXd& x_scales,
323std::unique_ptr<ScreeningRule>
No screening rule - uses all variables.
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.
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.
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.
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.
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.