Skip to main content

Dual-Gram 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 src.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.0.tar.gz (25.8 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.0-py3-none-any.whl (6.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: pppca-0.0.0.tar.gz
  • Upload date:
  • Size: 25.8 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.0.tar.gz
Algorithm Hash digest
SHA256 56869be10f3943c9dacfdda9f3cfc0977c9629b93729620794646f3e0aeca741
MD5 cad7c700c64ecd40546c45cde8429ad0
BLAKE2b-256 9a88768f47ff7013ccb2f91d3cb47625985e3e8dbab178bd3f802a29e6f105dd

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pppca-0.0.0-py3-none-any.whl
  • Upload date:
  • Size: 6.3 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3f1b2b23aeccce18714e47bfbf072d6650bffd9f5f73be6381f485d6b57a7d52
MD5 eda0b4d92c0d40071b49084dc96f724f
BLAKE2b-256 648e1584661e4cb3d251a96a5a45ea1665dfd1dc727495cdde822b584f3f8645

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