A fast canonical-correlation-based search algorithm for feature selection, system identification, data pruning, etc.
fastcan: A fast canonical-correlation-based search algorithm ============================================================ |conda| |Codecov| |CI| |Doc| |PythonVersion| |PyPi| |ruff| |pixi| |asv| |ty|
.. |conda| image:: https://img.shields.io/conda/vn/conda-forge/fastcan.svg :target: https://anaconda.org/conda-forge/fastcan
.. |Codecov| image:: https://codecov.io/gh/scikit-learn-contrib/fastcan/branch/main/graph/badge.svg :target: https://codecov.io/gh/scikit-learn-contrib/fastcan
.. |CI| image:: https://github.com/scikit-learn-contrib/fastcan/actions/workflows/ci.yml/badge.svg :target: https://github.com/scikit-learn-contrib/fastcan/actions
.. |Doc| image:: https://readthedocs.org/projects/fastcan/badge/?version=latest :target: https://fastcan.readthedocs.io/en/latest/?badge=latest
.. |PythonVersion| image:: https://img.shields.io/pypi/pyversions/fastcan.svg :target: https://pypi.org/project/fastcan/
.. |PyPi| image:: https://img.shields.io/pypi/v/fastcan :target: https://pypi.org/project/fastcan
.. |ruff| image:: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json :target: https://github.com/astral-sh/ruff
.. |pixi| image:: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/prefix-dev/pixi/main/assets/badge/v0.json :target: https://pixi.sh
.. |asv| image:: https://img.shields.io/badge/benchmarked%20by-asv-blue.svg :target: https://contrib.scikit-learn.org/fastcan/
.. |ty| image:: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ty/main/assets/badge/v0.json :target: https://github.com/astral-sh/ty
fastcan is a search algorithm that supports:
#. Feature selection
* Supervised
* Unsupervised
* Multioutput
#. Term selection for time series regressors (e.g., NARX models)
#. Data pruning (i.e., sample selection)
Key advantages:
#. Extremely fast -- Designed for high performance, even with large datasets
#. Redundancy-aware -- Effectively handles feature or sample redundancy to select the most informative subset
#. Multioutput -- Natively supports matrix-valued targets for multioutput tasks
Check Home Page <https://fastcan.readthedocs.io/en/latest/>_ for more information.
Installation
Install fastcan via PyPi:
- Run `
pip install fastcan
- Run
conda install -c conda-forge fastcan
>>> from fastcan import FastCan >>> X = [[ 0.87, -1.34, 0.31 ], ... [-2.79, -0.02, -0.85 ], ... [-1.34, -0.48, -2.55 ], ... [ 1.92, 1.48, 0.65 ]] >>> # Multioutput feature selection >>> y = [[0, 0], [1, 1], [0, 0], [1, 0]] >>> selector = FastCan( ... nfeaturesto_select=2, verbose=0 ... ).fit(X, y) >>> selector.get_support() array([ True, True, False]) >>> # Sorted indices >>> selector.get_support(indices=True) array([0, 1]) >>> # Indices in selection order >>> selector.indices_ array([1, 0], dtype=int32) >>> # Scores for selected features in selection order >>> selector.scores_ array([0.91162413, 0.71089547]) >>> # Here Feature 2 must be included >>> selector = FastCan( ... nfeaturestoselect=2, indicesinclude=[2], verbose=0 ... ).fit(X, y) >>> # The feature which is useful when working with Feature 2 >>> selector.indices_ array([2, 0], dtype=int32) >>> selector.scores_ array([0.34617598, 0.95815008])
NARX Time Series Modelling
fastcan can be used for system identification. In particular, we provide a submodule fastcan.narx
to build Nonlinear AutoRegressive eXogenous (NARX) models. For more information, check this NARX model example _.
Support WASM Wheels
fastcan is compiled to WebAssembly (WASM) wheels using pyodide _. You can try it in a REPL _ directly in a browser. The WASM wheels of fastcan can be installed by
>>> import micropip # doctest: +SKIP >>> await micropip.install('fastcan') # doctest: +SKIP
📝 Note: The nightly wasm wheel of fastcan's dependency (i.e. scikit-learn) can be found in
Scientific Python Nightly Wheels _.
Citation
fastcan is a Python implementation of the following papers.
If you use the
h-correlation method in your work please cite the following reference:
.. code:: bibtex
@article{ZHANG2022108419, title = {Orthogonal least squares based fast feature selection for linear classification}, journal = {Pattern Recognition}, volume = {123}, pages = {108419}, year = {2022}, issn = {0031-3203}, doi = {https://doi.org/10.1016/j.patcog.2021.108419}, url = {https://www.sciencedirect.com/science/article/pii/S0031320321005951}, author = {Sikai Zhang and Zi-Qiang Lang}, keywords = {Feature selection, Orthogonal least squares, Canonical correlation analysis, Linear discriminant analysis, Multi-label, Multivariate time series, Feature interaction}, }
If you use the
eta-cosine method in your work please cite the following reference:
.. code:: bibtex
@article{ZHANG2025111895, title = {Canonical-correlation-based fast feature selection for structural health monitoring}, journal = {Mechanical Systems and Signal Processing}, volume = {223}, pages = {111895}, year = {2025}, issn = {0888-3270}, doi = {https://doi.org/10.1016/j.ymssp.2024.111895}, url = {https://www.sciencedirect.com/science/article/pii/S0888327024007933}, author = {Sikai Zhang and Tingna Wang and Keith Worden and Limin Sun and Elizabeth J. Cross}, keywords = {Multivariate feature selection, Filter method, Canonical correlation analysis, Feature interaction, Feature redundancy, Structural health monitoring}, }
If you just want to cite the
fastcan` software, please use the following reference:
.. code:: bibtex
@article{WANG2026102598, title = {fastcan: A fast canonical-correlation-based searching algorithm}, journal = {SoftwareX}, volume = {34}, pages = {102598}, year = {2026}, issn = {2352-7110}, doi = {https://doi.org/10.1016/j.softx.2026.102598}, url = {https://www.sciencedirect.com/science/article/pii/S2352711026000919}, author = {Tingna Wang and Sikai Zhang and Lin Chen and Limin Sun}, keywords = {Machine learning, Scikit-learn, Feature selection, Data pruning, Time series, System identification, NARX}, }