Probabilistic Principal Component Analysis (PPCA) model

PyPI version

This project implements a PPCA model implemented in Rust for Python using pyO3 and maturin.

Installing

This package is available in PyPI! bash pip install ppca-rs

And you can also use it natively in Rust: bash cargo add ppca

Why use PPCA?

Glad you asked!

Why use ppca-rs?

That's an easy one!

Quick example

```python import numpy as np from ppca_rs import Dataset, PPCATrainer, PPCA

samples: np.ndarray

Create your dataset from a rank 2 np.ndarray, where each line is a sample.

Use non-finite values (infs and nan) to signal masked values

dataset = Dataset(samples)

Train the model (convenient edition!):

model: PPCAModel = PPCATrainer(dataset).train(statesize=10, niters=10)

And now, here is a free sample of what you can do:

Extrapolates the missing values with the most probable values:

extrapolated: Dataset = model.extrapolate(dataset)

Smooths (removes noise from) samples and fills in missing values:

extrapolated: Dataset = model.filter_extrapolate(dataset)

... go back to numpy:

eextrapolated_np = extrapolated.numpy()

```

Juicy extras!

Building from soure

Prerequisites

You will need Rust, which can be installed locally (i.e., without sudo) and you will also need maturin, which can be installed by bash pip install maturin pipenv is also a good idea if you are going to mess around with it locally. At least, you need a venv set, otherwise, maturin will complain with you.

Installing it locally

Check the Makefile for the available commands (or just type make). To install it locally, do bash make install # optional: i=python.version (e.g, `i=3.9`)

Messing around and testing

To mess around, inside a virtual environment (a Pipfile is provided for the pipenv lovers), do bash maturin develop # use the flag --release to unlock superspeed! This will install the package locally as is from source.

How do I use this stuff?

See the examples in the examples folder. Also, all functions are type hinted and commented. If you are using pylance or mypy, it should be easy to navigate.

Is it faster than the pure Python implemetation you made?

You bet!