Skip to main content

PCA for multivariate point processes

Project description

pppca

Point Process Principal Component Analysis (PPPCA)

pppca implements Gram PCA for multivariate point processes on ([0,1]^d). Instead of treating data as fixed-length vectors, this library handles point processes—sets of points in space where the number of points can vary between observations. It computes a centered Gram matrix, performs eigendecomposition, and provides tools to evaluate the learned "eigenfunctions" (principal components) at any location in the domain.

This is particularly useful for dimensionality reduction and exploratory analysis of:

  • Spike trains (1D)
  • Spatial point patterns (2D/3D)
  • Event logs or sparse observational data

Basic Usage

Input Format

The main function pppca expects a list of tensors.

  • Input: A python list of n observations.
  • Observation: A torch.Tensor of shape (k_i, d), where k_i is the number of points in that specific observation and d is the dimension (e.g., d=2 for 2D coordinates).
  • Domain: All coordinates should be normalized to [0, 1].

Quickstart

import torch
import numpy as np
import matplotlib.pyplot as plt
from pppca.core import pppca

# 1. Generate synthetic data (e.g., 25 observations in 2D)
# Each element in 'processes' is a tensor of shape (num_points, 2)
d = 2
n_obs = 25
processes = []
torch.manual_seed(42)

for _ in range(n_obs):
    # Create random points in ^2
    num_points = torch.randint(low=5, high=20, size=(1,)).item()
    points = torch.rand((num_points, d))
    processes.append(points)

# 2. Run PPPCA
results = pppca(processes, Jmax=2)

# 3. Inspect Results
print("Eigenvalues:", results["eigenval"])
print("Scores (first 5):\n", results["scores"].head())

# 4. Evaluate and plot the first eigenfunction
# Create a grid of query points
grid = np.linspace(0, 1, 50)
X, Y = np.meshgrid(grid, grid)
query_points = np.stack([X.ravel(), Y.ravel()], axis=1) # Shape (2500, 2)

# Evaluate eigenfunctions at query points
eta_vals = results["eigenfun"](query_points)

# Plot
plt.contourf(X, Y, eta_vals[:, 0].reshape(50, 50), levels=20, cmap='RdBu')
plt.colorbar(label="Eigenfunction Value")
plt.title("First Principal Component (Eigenfunction)")
plt.show()

📄 Reference & Reproducibility

The full research paper describing the methodology is included in this repository:

  • Read the Paper: See the paper/ directory for the PDF and supplementary materials.

To reproduce the experiments and figures presented in the paper, please refer to the examples:

  • Reproducibility Code: The examples/ directory contains scripts and notebooks to generate the results and visualizations discussed in the research.

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

pppca-0.0.1.tar.gz (25.7 kB view details)

Uploaded Source

Built Distribution

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

pppca-0.0.1-py3-none-any.whl (6.2 kB view details)

Uploaded Python 3

File details

Details for the file pppca-0.0.1.tar.gz.

File metadata

  • Download URL: pppca-0.0.1.tar.gz
  • Upload date:
  • Size: 25.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: Hatch/1.16.2 cpython/3.13.6 HTTPX/0.28.1

File hashes

Hashes for pppca-0.0.1.tar.gz
Algorithm Hash digest
SHA256 4c52a5b409c88097d7da98627a0ef33fa1606e299e55354a300870dae8445745
MD5 a730c2c9f43c6c9d9a4f378377c3940d
BLAKE2b-256 0db0dee1957e5468a11475472037022a0935fa491ad47ced882d07a032b9a05a

See more details on using hashes here.

File details

Details for the file pppca-0.0.1-py3-none-any.whl.

File metadata

  • Download URL: pppca-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 6.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: Hatch/1.16.2 cpython/3.13.6 HTTPX/0.28.1

File hashes

Hashes for pppca-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f42c61fe195db452ff4dc8dd88e9112fdd33de57e0e2532f8f623eb5010cc7ce
MD5 ac349182ad1bda367f0f61b90224aa40
BLAKE2b-256 3ea513a2fc73471a5552fbf126c94eff423c9324953809eeff0f62bbf8acb298

See more details on using hashes here.

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