Skip to main content

Fast computation of possibly weighted and possibly centered/scaled training set kernel matrices in a cross-validation setting.

Project description

CVMatrix

PyPI Version

PyPI - Downloads

Python Versions

License

Documentation Status

Tests Status

Package Status

The cvmatrix package implements the fast cross-validation algorithms by Engstrøm and Jensen [1] for computation of training set $\mathbf{X}^{\mathbf{T}}\mathbf{X}$ and $\mathbf{X}^{\mathbf{T}}\mathbf{Y}$ in a cross-validation setting. In addition to correctly handling arbitrary row-wise pre-processing, the algorithms allow for and efficiently and correctly handle any combination of column-wise centering and scaling of X and Y based on training set statistical moments.

For an implementation of the fast cross-validation algorithms combined with Improved Kernel Partial Least Squares [2], see the Python package ikpls by Engstrøm et al. [3].

NEW IN 2.0.0: Weighted CVMatrix

The cvmatrix software package now also features weigthed matrix produts $\mathbf{X}^{\mathbf{T}}\mathbf{W}\mathbf{Y}$ without increasing time or space complexity compared to the unweighted case. This is due to a generalization of the algorithms by Engstrøm and Jensen [1]. A new article formally describing the generalization is to be announced.

Installation

  • Install the package for Python3 using the following command:

    pip3 install cvmatrix
    
  • Now you can import the class implementing all the algorithms with:

    from cvmatrix.cvmatrix import CVMatrix
    

Quick Start

Use the cvmatrix package for fast computation of training set kernel matrices

import numpy as np
from cvmatrix.cvmatrix import CVMatrix

N = 100  # Number of samples.
K = 50  # Number of features.
M = 10  # Number of targets.

X = np.random.uniform(size=(N, K)) # Random X data
Y = np.random.uniform(size=(N, M)) # Random Y data
folds = np.arange(100) % 5 # 5-fold cross-validation

# Weights must be non-negative and the sum of weights for any training partition must
# be greater than zero.
weights = np.random.uniform(size=(N,)) + 0.1

# Instantiate CVMatrix
cvm = CVMatrix(
    folds=folds,
    center_X=True, # Cemter around the weighted mean of X.
    center_Y=True, # Cemter around the weighted mean of Y.
    scale_X=True, # Scale by the weighted standard deviation of X.
    scale_Y=True, # Scale by the weighted standard deviation of Y.
)
# Fit on X and Y
cvm.fit(X=X, Y=Y, weights=weights)
# Compute training set XTWX and/or XTWY for each fold
for fold in cvm.folds_dict.keys():
    # Get both XTWX and XTWY
    training_XTX, training_XTY = cvm.training_XTX_XTY(fold)
    # Get only XTWX
    training_XTX = cvm.training_XTX(fold)
    # Get only XTWY
    training_XTY = cvm.training_XTY(fold)

Examples

In examples, you will find:

Benchmarks

In benchmarks, we have benchmarked cross-validation of the fast algorithms in cvmatrix against the baseline algorithms implemented in NaiveCVMatrix.


Left: Benchmarking cross-validation with the CVMatrix implementation versus the baseline implementation using three common combinations of (column-wise) centering and scaling. Right: Benchmarking cross-validation with the CVMatrix implementation for all possible combinations of (column-wise) centering and scaling. Here, most of the graphs lie on top of eachother. In general, no preprocessing is faster than centering which, in turn, is faster than scaling.

Contribute

To contribute, please read the Contribution Guidelines.

References

  1. Engstrøm, O.-C. G. and Jensen, M. H. (2025). Fast partition-based cross-validation with centering and scaling for $\mathbf{X}^\mathbf{T}\mathbf{X}$ and $\mathbf{X}^\mathbf{T}\mathbf{Y}$. Journal of Chemometrics, 39(3).
  2. Dayal, B. S. and MacGregor, J. F. (1997). Improved PLS algorithms. Journal of Chemometrics, 11(1), 73-85.
  3. Engstrøm, O.-C. G. and Dreier, E. S. and Jespersen, B. M. and Pedersen, K. S. (2024). IKPLS: Improved Kernel Partial Least Squares and Fast Cross-Validation Algorithms for Python with CPU and GPU Implementations Using NumPy and JAX. Journal of Open Source Software, 9(99).

Funding

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cvmatrix-2.0.2.tar.gz (13.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cvmatrix-2.0.2-py3-none-any.whl (12.6 kB view details)

Uploaded Python 3

File details

Details for the file cvmatrix-2.0.2.tar.gz.

File metadata

  • Download URL: cvmatrix-2.0.2.tar.gz
  • Upload date:
  • Size: 13.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for cvmatrix-2.0.2.tar.gz
Algorithm Hash digest
SHA256 363f61b1a37ef4c4afa96ad513709ace8cfd702bfb98fdd7fad370c61ce24e10
MD5 ba86611ce34ebeee9e40b78dab5f9df1
BLAKE2b-256 ad893cedb3f9b2eee4fd93546261152785051dcae183e6f2e96e9ec4944ae04f

See more details on using hashes here.

Provenance

The following attestation bundles were made for cvmatrix-2.0.2.tar.gz:

Publisher: package_workflow.yml on sm00thix/cvmatrix

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cvmatrix-2.0.2-py3-none-any.whl.

File metadata

  • Download URL: cvmatrix-2.0.2-py3-none-any.whl
  • Upload date:
  • Size: 12.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for cvmatrix-2.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 190ca78e80205fe7d7793c2262ed1bedb5e2f4cf8820ad31118250bd26ef331b
MD5 1c2b9c4461e83873a0a70dbb93d41b60
BLAKE2b-256 6ce70acf8f2c3d5b201d72c165224d9d6e2ea996adc03df523fb169d80228812

See more details on using hashes here.

Provenance

The following attestation bundles were made for cvmatrix-2.0.2-py3-none-any.whl:

Publisher: package_workflow.yml on sm00thix/cvmatrix

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page