12#include <Eigen/SparseCore>
36strongSet(
const Eigen::VectorXd& gradient_prev,
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;
152 std::vector<int>
initialize(
const std::vector<int>& full_set,
153 int alpha_max_ind)
override;
155 std::vector<int>
screen(Eigen::VectorXd& gradient,
156 const Eigen::ArrayXd& lambda_curr,
157 const Eigen::ArrayXd& lambda_prev,
158 const Eigen::VectorXd& beta,
159 const std::vector<int>& full_set)
override;
162 const Eigen::VectorXd& beta,
163 const Eigen::ArrayXd& lambda_curr,
164 std::vector<int>& working_set,
165 const Eigen::MatrixXd& x,
166 const Eigen::MatrixXd& residual,
167 const Eigen::VectorXd& x_centers,
168 const Eigen::VectorXd& x_scales,
170 const std::vector<int>& full_set)
override;
173 const Eigen::VectorXd& beta,
174 const Eigen::ArrayXd& lambda_curr,
175 std::vector<int>& working_set,
176 const Eigen::SparseMatrix<double>& x,
177 const Eigen::MatrixXd& residual,
178 const Eigen::VectorXd& x_centers,
179 const Eigen::VectorXd& x_scales,
181 const std::vector<int>& full_set)
override;
183 std::string
toString()
const override;
193 std::vector<int>
initialize(
const std::vector<int>& full_set,
194 int alpha_max_ind)
override;
196 std::vector<int>
screen(Eigen::VectorXd& gradient,
197 const Eigen::ArrayXd& lambda_curr,
198 const Eigen::ArrayXd& lambda_prev,
199 const Eigen::VectorXd& beta,
200 const std::vector<int>& full_set)
override;
203 const Eigen::VectorXd& beta,
204 const Eigen::ArrayXd& lambda_curr,
205 std::vector<int>& working_set,
206 const Eigen::MatrixXd& x,
207 const Eigen::MatrixXd& residual,
208 const Eigen::VectorXd& x_centers,
209 const Eigen::VectorXd& x_scales,
211 const std::vector<int>& full_set)
override;
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,
222 const std::vector<int>& full_set)
override;
224 std::string
toString()
const override;
227 template<
typename MatrixType>
228 bool checkKktViolationsImpl(Eigen::VectorXd& gradient,
229 const Eigen::VectorXd& beta,
230 const Eigen::ArrayXd& lambda_curr,
231 std::vector<int>& working_set,
233 const Eigen::MatrixXd& residual,
234 const Eigen::VectorXd& x_centers,
235 const Eigen::VectorXd& x_scales,
237 const std::vector<int>& full_set);
247std::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.
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.
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 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 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.
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::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.