andy971022 / CWGP

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Compositionally Warped Gaussian Processes

This package is dedicated to realizing methods used in this paper.

TLDR;

A package that transforms anything to a Gaussian process.

Installation

pip install CWGP

Quick Start

Let's randomly generate 100 numbers following an exponential distribution.

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

exp = np.random.exponential(scale=5, size=50)
idx = np.arange(50)

We now instantiate a CWGP class consisting of 3 Sinh-Arcsinh transformations.

from cwgp.cwgp import CWGP

compgp = CWGP(["sa","box_cox"])

We then fit our data into the model. This minimizes the negative log likelihood function and stores the corresponding parameters for us.

compgp.fit(exp, idx)

To get the parameters, we do

params = compgp.phi.res.x

We then transform the data via

t_exp, d = compgp.phi.comp_phi(params, exp)
sns.distplot(t_exp)
plt.show()

Let's make a QQ-plot and see how Gaussian it is.

from scipy import stats

stats.probplot(t_exp, dist="norm", plot=plt)
plt.show()

The inverse function is also implemented.

inv_t_exp = compgp.phi.inv_comp_phi(params, t_exp)
fig, ax = plt.subplots(1, 2)
sns.distplot(inv_t_exp, ax=ax[0])
sns.distplot(exp, ax=ax[1])
plt.show()

The one on the left is the one being transformed and transformed-back, and the one on the right is the original distribution. They should be exactly the same.

Transformations

Sinh-Arcsinh (sa)

from cwgp.transformations import sa

Arcsinh (asinh)

from cwgp.transformations import asinh

Box-Cox (box_cox)

from cwgp.transformations import box_cox

Sinh-Arcsinh and Affine (SAL)

from cwgp.transformations import sal

About

License:MIT License


Languages

Language:Python 98.4%Language:Shell 1.6%