SkillAgentSearch skills...

Fastcan

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

Install / Use

/learn @scikit-learn-contrib/Fastcan

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&style=flat-square :target: https://pixi.sh

.. |asv| image:: https://img.shields.io/badge/benchmarked%20by-asv-blue.svg?style=flat :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( ... n_features_to_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( ... n_features_to_select=2, indices_include=[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 <https://fastcan.readthedocs.io/en/latest/auto_examples/plot_narx.html>_.

Support Free-Threaded Wheels

fastcan has support for free-threaded (also known as nogil) CPython 3.13. For more information about free-threaded CPython, check how to install a free-threaded CPython <https://py-free-threading.github.io/installing_cpython/>_.

Support WASM Wheels

fastcan is compiled to WebAssembly (WASM) wheels using pyodide <https://github.com/pyodide/pyodide>. You can try it in a REPL <https://pyodide.org/en/stable/console.html> directly in a browser, without installation. However, the version of fastcan may be delayed in pyodide. If the latest fastcan WASM wheels are required, you can find them on the assets of GitHub releases, and the installation is required. The WASM wheels of fastcan can be installed by

import micropip # doctest: +SKIP await micropip.install('URL of the wasm wheel (end with _wasm32.whl)') # doctest: +SKIP

📝 Note: Due to the Cross-Origin Resource Sharing (CORS) block in web browsers, you may need Allow CORS: Access-Control-Allow-Origin Chrome extension <https://chrome.google.com/webstore/detail/allow-cors-access-control/lhobafahddgcelffkeicbaginigeejlf>_.

📝 Note: The nightly wasm wheel of fastcan's dependency (i.e. scikit-learn) can be found in Scientific Python Nightly Wheels <https://pypi.anaconda.org/scientific-python-nightly-wheels/simple/>_.

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

View on GitHub
GitHub Stars20
CategoryData
Updated12d ago
Forks5

Languages

Python

Security Score

95/100

Audited on Mar 26, 2026

No findings