MCPcopy Create free account
hub / github.com/abess-team/abess

github.com/abess-team/abess @0.4.11

Chat with this repo
repository ↗ · DeepWiki ↗ · release 0.4.11 ↗ · + Follow
11,007 symbols 24,664 edges 645 files 1,191 documented · 11% updated 4mo ago0.4.11 · 2026-03-04★ 47510 open issues

Browse by type

Functions 7,692 Types & classes 3,315
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

abess: Fast Best-Subset Selection in Python and R

Python Build R Build codecov docs R docs cran pypi Conda version pyversions License Codacy Badge CodeFactor Platform Downloads

Overview

abess (Adaptive BEst Subset Selection) library aims to solve general best subset selection, i.e., find a small subset of predictors such that the resulting model is expected to have the highest accuracy. The selection for best subset shows great value in scientific researches and practical applications. For example, clinicians want to know whether a patient is healthy or not based on the expression levels of a few of important genes.

This library implements a generic algorithm framework to find the optimal solution in an extremely fast way. This framework now supports the detection of best subset under: linear regression, classification (binary or multi-class), counting-response modeling, censored-response modeling, multi-response modeling (multi-tasks learning), etc. It also supports the variants of best subset selection like group best subset selection, nuisance penalized regression, Especially, the time complexity of (group) best subset selection for linear regression is certifiably polynomial.

Quick start

The abess software has both Python and R's interfaces. Here a quick start will be given and for more details, please view: Installation.

Python package

Install the stable version of Python-package from Pypi:

$ pip install abess

or conda-forge:

$ conda install abess

Best subset selection for linear regression on a simulated dataset in Python:

from abess.linear import LinearRegression
from abess.datasets import make_glm_data
sim_dat = make_glm_data(n = 300, p = 1000, k = 10, family = "gaussian")
model = LinearRegression()
model.fit(sim_dat.x, sim_dat.y)

See more examples analyzed with Python in the Python tutorials.

R package

Install the stable version of R-package from CRAN with:

install.packages("abess")

Best subset selection for linear regression on a simulated dataset in R:

library(abess)
sim_dat <- generate.data(n = 300, p = 1000)
abess(x = sim_dat[["x"]], y = sim_dat[["y"]])

See more examples analyzed with R in the R tutorials.

Runtime Performance

To show the power of abess in computation, we assess its timings of the CPU execution (seconds) on synthetic datasets, and compare to state-of-the-art variable selection methods. The variable selection and estimation results are deferred to Python performance and R performance. All computations are conducted on a Ubuntu platform with Intel(R) Core(TM) i9-9940X CPU @ 3.30GHz and 48 RAM.

Python package

We compare abess Python package with scikit-learn on linear regression and logistic regression. Results are presented in the below figure:

It can be see that abess uses the least runtime to find the solution. This results can be reproduced by running the command in shell:

$ python abess/docs/simulation/Python/timings.py

R package

We compare abess R package with three widely used R packages: glmnet, ncvreg, and L0Learn. We get the runtime comparison results:

Compared with other packages, abess shows competitive computational efficiency, and achieves the best computational power when variables have a large correlation.

Conducting the following command in shell can reproduce the above results in R:

$ Rscript abess/docs/simulation/R/timings.R

Open source software

abess is a free software and its source code is publicly available on Github. The core framework is programmed in C++, and user-friendly R and Python interfaces are offered. You can redistribute it and/or modify it under the terms of the GPL-v3 License. We welcome contributions for abess, especially stretching abess to the other best subset selection problems.

What's news

New features version 0.4.7:

  • Support limiting beta into a range by clipping method. One application is to perform non-negative fitting.
  • Support no-intercept model for most regressors in abess.linear with argument fit_intercept=False. We assume that the data has been centered for these models.
  • Support AUC criterion for Logistic and Multinomial Regression.

New features version 0.4.6:

  • Support no-intercept model for most regressors in abess.linear with argument fit_intercept=False. We assume that the data has been centered for these models. (Python)
  • abess can be used via mlr3extralearners as learners regr.abess and classif.abess. (R)
  • Use CMake on compiling to increase scalability.
  • Support score functions for all GLM models. (Python)
  • Rearrange some arguments in Python package to improve legibility. Please check the latest API document. (Python)

Citation

If you use abess or reference our tutorials in a presentation or publication, we would appreciate citations of our library.

Zhu Jin, Xueqin Wang, Liyuan Hu, Junhao Huang, Kangkang Jiang, Yanhang Zhang, Shiyun Lin, and Junxian Zhu. "abess: A Fast Best-Subset Selection Library in Python and R." Journal of Machine Learning Research 23, no. 202 (2022): 1-7.

The corresponding BibteX entry:

@article{JMLR:v23:21-1060,
  author  = {Jin Zhu and Xueqin Wang and Liyuan Hu and Junhao Huang and Kangkang Jiang and Yanhang Zhang and Shiyun Lin and Junxian Zhu},
  title   = {abess: A Fast Best-Subset Selection Library in Python and R},
  journal = {Journal of Machine Learning Research},
  year    = {2022},
  volume  = {23},
  number  = {202},
  pages   = {1--7},
  url     = {http://jmlr.org/papers/v23/21-1060.html}
}

References

  • Junxian Zhu, Canhong Wen, Jin Zhu, Heping Zhang, and Xueqin Wang (2020). A polynomial algorithm for best-subset selection problem. Proceedings of the National Academy of Sciences, 117(52):33117-33123.
  • Pölsterl, S (2020). scikit-survival: A Library for Time-to-Event Analysis Built on Top of scikit-learn. J. Mach. Learn. Res., 21(212), 1-6.
  • Yanhang Zhang, Junxian Zhu, Jin Zhu, and Xueqin Wang. A splicing approach to best subset of groups selection. INFORMS Journal on Computing, 35(1):104–119, 2023. doi: 10.1287/ijoc.2022.1241.
  • Qiang Sun and Heping Zhang (2020). Targeted Inference Involving High-Dimensional Data Using Nuisance Penalized Regression, Journal of the American Statistical Association, DOI: 10.1080/01621459.2020.1737079.
  • Zhu Jin, Xueqin Wang, Liyuan Hu, Junhao Huang, Kangkang Jiang, Yanhang Zhang, Shiyun Lin, and Junxian Zhu. "abess: A Fast Best-Subset Selection Library in Python and R." Journal of Machine Learning Research 23, no. 202 (2022): 1-7.

Contributions

👏 Thanks for the following support 👏

Stargazers

Stargazers repo roster for @abess-team/abess

Forkers

Forkers repo roster for @abess-team/abess

Any kind of contribution to abess would be highly appreciated! Please check the contributor's guide.

Core symbols most depended-on inside this repo

Shape

Method 5,277
Class 3,277
Function 2,415
Enum 38

Languages

C++98%
Python2%

Modules by API surface

python/include/unsupported/test/mpreal/mpreal.h206 symbols
python/include/Eigen/src/Core/util/ForwardDeclarations.h152 symbols
python/include/Eigen/src/Core/MathFunctions.h146 symbols
python/include/Eigen/src/Core/functors/UnaryFunctors.h141 symbols
python/include/Eigen/src/Core/util/Meta.h135 symbols
python/include/unsupported/Eigen/CXX11/src/util/CXX11Meta.h131 symbols
python/include/unsupported/Eigen/CXX11/src/Tensor/TensorBase.h130 symbols
python/include/Eigen/src/Core/CoreEvaluators.h130 symbols
python/include/unsupported/Eigen/CXX11/src/Tensor/TensorIndexList.h127 symbols
python/include/Eigen/src/Core/util/XprHelper.h122 symbols
python/include/Eigen/src/Core/ProductEvaluators.h122 symbols
python/include/Eigen/src/Core/arch/SSE/PacketMath.h119 symbols

For agents

$ claude mcp add abess \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page