Skip to main content

SQFA

Build Status Tests Status Documentation Status License: MIT Python version codecov PyPI version

Supervised Quadratic Feature Analysis (SQFA) is a supervised dimensionality reduction technique. It learns a set of linear features that maximize the differences in first- and second-order statistics between classes, in a way that supports quadratic classifiers (e.g. QDA). The sqfa package implements SQFA.

For detailed information on the method and the package, see the sqfa package tutorials and the SQFA preprint, "Supervised Quadratic Feature Analysis: An Information Geometry Approach to Dimensionality Reduction".

Overview

The package provides the class SQFA that can be used to train the model. The class has an API similar to sklearn. An example of how to use the SQFA class is shown below:

import sqfa
import torchvision

### DOWNLOAD DATASET

trainset = torchvision.datasets.MNIST(
    root="./data", train=True, download=True
)
X = trainset.data.reshape(-1, 28 * 28).float()
y = trainset.targets
# Scale X
X = X / (X.std() * 28.0)
X = X - X.mean(dim=0, keepdim=True)

### INITIALIZE SQFA MODEL

model = sqfa.model.SQFA(
    n_dim=X.shape[-1],
    n_filters=4,
    feature_noise=0.01,
)

### FIT MODEL. TWO OPTIONS:

# 1) Give data and labels as input
model.fit_pca(X) # Optional: PCA initialization to speed up convergence
model.fit(X=X, y=y)

# 2) Give dictionary with data statistics as input
data_stats = sqfa.statistics.class_statistics(X, y)
model.fit_pca(data_statistics=data_stats) # Optional: PCA initialization to speed up convergence
model.fit(data_statistics=data_stats)

### TRANSFORM DATA AND SECOND MOMENTS TO THE LEARNED FEATURE SPACE

X_transformed = model.transform(X).detach()
second_moments_transformed = model.transform_scatters(
    data_stats["second_moments"],
).detach()

Installation

Virtual environment

We recommend installing the package in a virtual environment. For this, you can first install miniconda (install instructions link), and then create a virtual environment with Python 3.11 using the following shell command:

conda create -n my-sqfa python=3.11

You can then activate the virtual environment with the following command:

conda activate my-sqfa

You should activate the my-sqfa environment to install the package, and every time you want to use it.

Install package from PyPI

The easiest way to install the package is form the PyPI repository. To install the package and the dependencies needed to run the tutorials, use the following command:

pip install sqfa[dev]

To install the lighter version without the tutorials dependencies, use

pip install sqfa

Install package from source

To install the package from source (e.g., if you want to modify the code), you can clone the repository and install the package in editable mode with the following commands:

git clone https://github.com/dherrera1911/sqfa.git
cd sqfa
pip install -e .[dev]

Citation

Please cite the SQFA preprint if you use the package:

@misc{herreraesposito2025supervisedquadraticfeatureanalysis,
      title={Supervised Quadratic Feature Analysis: An Information Geometry Approach to Dimensionality Reduction}, 
      author={Daniel Herrera-Esposito and Johannes Burge},
      year={2025},
      eprint={2502.00168},
      archivePrefix={arXiv},
      primaryClass={stat.ML},
      url={https://arxiv.org/abs/2502.00168}, 
}

Metadata

Release files for sqfa 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sqfa 0.2.0
File Size Uploaded Provenance Actions
sqfa-0.2.0.tar.gz 115.4 kB With provenance Details for sqfa-0.2.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for sqfa 0.2.0
File Interpreter ABI Platform Actions
sqfa-0.2.0-py3-none-any.whl Python 3 none any Details for sqfa-0.2.0-py3-none-any.whl

Total release size: 135.9 kB

Release files / sqfa-0.2.0.tar.gz

Download URL sqfa-0.2.0.tar.gz
Size 115.4 kB
Tags Source
SHA-256 checksum
How to use checksums
be06c7f02b056235538e337ffc4744c3a4f93dbb53d60e1ebfb8206cd27f5934
BLAKE2b-256 checksum
How to use checksums
3a998a258dd19e35691fb180b0b8fcbdba7ef14c42613dc36437e3666911fc9f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.8

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 6, 2025.

Transparency log

Release files / sqfa-0.2.0-py3-none-any.whl

Download URL sqfa-0.2.0-py3-none-any.whl
Size 20.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
179778ecad538a543e09b7a692c23ca6f1ed8613ee47ec5fa13f6d7543154f21
BLAKE2b-256 checksum
How to use checksums
7a3a9810c42d34a92356ada25d2afa0bcabc0035abcfa29823ca27b85a09f807
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.8

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 6, 2025.

Transparency log

Security for sqfa 0.2.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for sqfa-0.2.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 6, 2025.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page