scikit-learn-contrib
fastcan
Python

A fast canonical-correlation-based search algorithm for feature selection, system identification, data pruning, etc.

Last updated Jun 27, 2026
27
Stars
5
Forks
9
Issues
0
Stars/day
Attention Score
58
Language breakdown
Python 89.3%
Cython 10.4%
Meson 0.4%
Files click to expand
README

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
Or via conda-forge:
  • Run conda install -c conda-forge fastcan
Getting Started
>>> 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 examples/plotnarx.html>_.

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}, }

🔗 More in this category

© 2026 GitRepoTrend · scikit-learn-contrib/fastcan · Updated daily from GitHub