Skip to main content

Supervised Quadratic Feature Analysis: Task specific second order feature extraction

Project description

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

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

sqfa-0.2.0.tar.gz (115.4 kB view details)

Uploaded Source

Built Distribution

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

sqfa-0.2.0-py3-none-any.whl (20.4 kB view details)

Uploaded Python 3

File details

Details for the file sqfa-0.2.0.tar.gz.

File metadata

  • Download URL: sqfa-0.2.0.tar.gz
  • Upload date:
  • Size: 115.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for sqfa-0.2.0.tar.gz
Algorithm Hash digest
SHA256 be06c7f02b056235538e337ffc4744c3a4f93dbb53d60e1ebfb8206cd27f5934
MD5 2cb169e55752bd7f16043e95512f451d
BLAKE2b-256 3a998a258dd19e35691fb180b0b8fcbdba7ef14c42613dc36437e3666911fc9f

See more details on using hashes here.

Provenance

The following attestation bundles were made for sqfa-0.2.0.tar.gz:

Publisher: publish-to-pypi.yml on dherrera1911/sqfa

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

File details

Details for the file sqfa-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: sqfa-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 20.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for sqfa-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 179778ecad538a543e09b7a692c23ca6f1ed8613ee47ec5fa13f6d7543154f21
MD5 56ed08dc629f9496445cd24d0a52a71c
BLAKE2b-256 7a3a9810c42d34a92356ada25d2afa0bcabc0035abcfa29823ca27b85a09f807

See more details on using hashes here.

Provenance

The following attestation bundles were made for sqfa-0.2.0-py3-none-any.whl:

Publisher: publish-to-pypi.yml on dherrera1911/sqfa

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