Releases: jolars/SLOPE
Releases · jolars/SLOPE
SLOPE 2.0.0
Breaking Changes
coef.SLOPE()withsimplify = FALSEandintercept = TRUEnow includes the
intercepts as part of the returned list of coefficient matrices.
New Features
- The
plot.SLOPE()method now plots a dot chart if there is just a single
value ofalpha, and not an empty plot (as before). - The
SLOPEobject now includesn_observationsandn_predictorsfields,
which store the number of observations and predictors in the training data. - The
summary.SLOPE()method now displays the number of observations and
predictors, with improved formatting for the path summary table. - Added
summary()method forTrainedSLOPEobjects (fromcvSLOPE()and
trainSLOPE()), which provides a concise overview of cross-validation results
including optimal parameters and performance metrics. - Added
refit()method forTrainedSLOPEobjects to conveniently refit models
with optimal parameters found through cross-validation. cvSLOPE()now automatically refits the model on the full dataset using
optimal parameters (controlled by newrefitargument, defaultTRUE). The
fitted model is stored in themodelslot of the returned object.
Minor Changes
- All roxygen documentation titles have been converted to title case for
consistency.
SLOPE 1.2.0
Major Changes
- The default argument for
threadsinSLOPE()has been changed fromNULL
(half of available cores) to1(no multithreading). This is to avoid
excessive CPU usage on systems with many cores. Users can still set
threads = NULLto get the previous behavior, or set it to any positive
integer to control the number of threads used.
Minor Changes
- The C++ routine can now be interrupted through R's usual interrupt mechanism
(e.g., Ctrl+C in RStudio or R terminal). - The citation information has been updated. Use
citation("SLOPE")to see the
correct way to cite the package. - The y axis label for coefficients has changed from
expression(hat(beta))to
"Coefficients"to avoid issues with rendering in some environments, where
the hat symbol would be cropped.
Bug Fixes
- In the return object from
SLOPE(), thecoefficients_scaledfield
incorrectly contained unscaled coefficients, which also affected
coef.SLOPE(). This has now been fixed.
SLOPE 1.1.0
New Features
- A new data set,
glioma, has been added to the package. It contains gene
expression measurements for patients with glioma along with healthy controls.
SLOPE 1.0.1
Bug Fixes
- Fixed a test error on the M1mac platform.
SLOPE 1.0.0
This update of SLOPE brings an entirely different C++ implementation of the
underlying package based on the C++ library
libslope. It comes with several large and
breaking changes with respect to the previous version of the package.
We realized that this may throw off some users, and hope that you will be
patient with dealing with the large number of breaking changes.
Breaking Changes
- The
caretSLOPE()function that was deprecated has now been removed from the
package. - Fields
unique,violations, andactive_setsare no longer stored in the
SLOPEobject. These fields were typically only used for debugging purposes. - The
prox_methodandmethodarguments inSLOPE()andsortedL1Prox(),
respectively, have been removed. The proximal operator is now always computed
using the fast stack-based algorithm. There was never any reason to use the
slower PAVA algorithm. - The ADMM solver has been removed from the package. Calling
SLOPE()with
solver = "admm"will now throws a warning and the value will be
automatically set to"auto". alphais now scaled byn(the number of observations) and differences with
respect to the type of scaling are no longer taken into account.- The object
coefficientsfromSLOPE()is now a list of sparse matrices
(rather than a three-dimensional array as before). Now it contains only the
coefficients and not the intercepts. The intercepts are instead stored in
interceptsin the returned object and are always present even if
intercept = FALSE. - The behavior of
coef.SLOPE()has changed somewhat, and if
simplify = FALSE, then the returned object is now instead a list of sparse
matrices (rather than a three-dimensional array as before). - The default value of
qinSLOPE()has changed from
0.1 * min(1, NROW(x) / NCOL(x))to0.1. - Arguments
sigma,n_sigma, andlambda_min_ratioinSLOPE()that were
previously deprecated have been removed. SLOPE()now internally solves the problem normalized by scaling with the
number of observations, which means that values returned indevianceand
prmalsanddualsifdiagnostics = TRUEare now scaled byn.path_lengthinSLOPE()now defaults to 100 (previously 20).tol_dev_ratioinSLOPE()now defaults to0.999(previously0.995).- Plots from
plot.SLOPE()now use base R graphics rather than ggplot2. This
means that the plots are more difficult to customize but plot much more faster
when there are many variables and significantly reduces the dependency load of
the package. For plots of trained SLOPE objects, which used to be faceted on
theqparameter, the user now needs to use the standard base R graphics API
to facet plots viapar(mfrow = c(1, 2))or similar.
Deprecated Functionality
- Arguments
tol_rel_gap,tol_infeas,tol_abs,tol_rel,tol_rel_coefin
SLOPE()are now deprecated. The solvers now all rely on the same tolerance
criterion, which is set bytoland uses the duality gap normalized by the
current primal value. - Arguments
screenandscreen_algare now deprecated and have no effect.
Feature screening is always used. These arguments were only used for
debugging. - The argument
verbosityinSLOPE()is now defunct and has no effect. - The argument
prox_methodinSLOPE()andsortedL1Prox()is now defunct
and has no effect.
New Features
- Centering
xinSLOPE()is now allowed again, even when the matrix is
sparse. - Out-of-memory matrices are now allowed through the
bigmemorypackage. Only
support for dense matrices is available at the moment. - Centers and scales can now be specified manually by providing vectors to
centerandscaleinSLOPE(). - A new solver based on a hybrid method of proximal gradient descent and
coordinate descent is available and used by default by the Gaussian and
binomial families. Use it by specifyingsolver = "hybrid". - Solver can now be set to
"auto", in which case the package automatically
chooses a solver. - The returned duality gaps when
diagnostics = TRUEare now true duality
gaps, computed by guaranteeing that the dual variable is feasible (which was
not the case previously). scaleinSLOPE()gains a new option"max_abs"which scales the columns
ofxby their maximum absolute value.- When
alpha = "estimate", there is a now an iteration limit in case the
algorithm does not converge to one set of features. Thanks @RomanParzer. plot.SLOPE()gains a new argumentmagnitudes, which causes the plot to
only show the magnitudes of the coefficients (which helps if you want to
visualize cluster structure).plot.SLOPE()gains a new argumentadd_labels, which add numbers for the
coefficients to the plot. Set toFALSEby default.- Relaxed SLOPE models can now be fit by specifying
gammainSLOPE(). plot.trainedSLOPE()gains a new argumentindex, to select which of the
hyperparameter combinations to plot for.- There's a new function
plotClusters(), which allows plotting the cluster
structure in SLOPE. Thanks, @KrystynaGrzesiak! SLOPE()gains a new argumentcd_type, to control the type of coordinate
descent used for the hybrid solver, with options"cyclical"and
"permuted".
Bug Fixes
- Return correct model when training for AUC in
trainSLOPE().
Performance Improvements
The new hybrid algorithm that's implemented in libslope and now used in the
package constitutes a major upgrade in terms of performance.
- The solver is now much more memory-efficient and can avoid copies of the
design matrix entirely by normalizing the columns just-in-time. This is the
standard behavior. Future versions of the package will allow the user to
specify whether to copy (and modify) the design matrix or not.
Dependencies
We have made an effort to reduce the footprint of the package and reduce the
number of dependencies.
- The package now relies on Eigen (through RcppEigen) rather than Armadillo,
which means that there is no longer any reliance on BLAS and LAPACK libraries. - The dependency on
ggplot2is removed. - The
vdiffr,tidyr,dplyr,bench,scales, andglmnetpackages in
theSuggestsfield that were used for testing are now removed.
SLOPE 0.5.1
Minor Changes
- Website updated to bootstrap 5-based pkgdown theme.
- Updated e-mail of maintainer.
- Dependencies on checkmate and mice were dropped.
- Update sparse matrix coercion to avoid deprecated functionality in the Matrix
package.
SLOPE 0.5.0
Major changes
plot.SLOPE(),plot.trainSLOPE()andplotDiagnostics()have been
reimplemented in ggplot2.
Deprecated Functions
caretSLOPE()has been deprecated and will be made defunct in version
0.6.0.
SLOPE 0.4.1
Bug Fixes
- The C++ standard library memory was added to a source file to fix
compilation errors on some systems.
SLOPE 0.4.0
New Functions
sortedL1Prox()is a new function that computes the proximal operator for the
sorted L1 norm (the penalty term in SLOPE).regularizationWeights()is a new function that returns the penalty weights
(lambda sequence) for SLOPE or OSCAR.
Major changes
- The parametrization for OSCAR models have been corrected and changed. As a
result,SLOPE()gains two arguments:theta1andtheta2to control the
behavior using the parametrization from L. W. Zhong and J. T. Kwok, “Efficient
sparse modeling with automatic feature grouping,” IEEE Transactions on Neural
Networks and Learning Systems, vol. 23, no. 9, pp. 1436–1447, Sep. 2012, doi:
10.1109/TNNLS.2012.2200262.qis no longer used with OSCAR models. Thanks,
Nuno Eusebio. SLOPE()has gained a new argument,prox_method, which allows the user to
select prox algorithm to use. There is no an additional algorithm in the
package, based on the PAVA algorithm used in isotonic regression, that
can be used. Note that this addition is mostly of academic interest and
does not need to be changed by the user.
Minor Changes
- The
qparameter is no longer allowed to be smaller than1e-6to avoid
constructions of regularization paths with infinitelambdavalues. - The
lambdaargument inSLOPE()now also allowed the input"lasso"to
obtain the standard lasso. - The performance of
trainSLOPE()
Vignettes
- A new vignette has been added to compare algorithms for the proximal
operator.
Bug Fixes
- For very small numbers of observations (10 or so), the regularization weights
forlambda = "gaussian"were incorrectly computed, increasing and then
decreasing. This is now fixed and regularization weights in this case are now
always non-increasing. - Misclassification error was previously computed incorrectly in
trainSLOPE()
for multinomial models (thanks @jakubkala and @KrystynaGrzesiak) - Performance of
trainSLOPE()was previously hampered by erroneous
refitting of the models, which has been fixed now (thanks @jakubkala and
@KrystynaGrzesiak)
Deprecated and Defunct
yvarargument inplotDiagnostics()that was previously deprecated is
now defunct.- Using
missclassfor themeasureargument intrainSLOPE()has been
deprecated in favor ofmisclass.
SLOPE 0.3.3
Bug fixes
- Fixed first coefficient missing from plot if no intercept was used in
the call toSLOPE(). - Fixed incorrect results when
intercept = FALSEandfamily = "gaussian"
(#13, thanks, Patrick Tardivel).