Beispiel #1
0
def test_base():
    with assert_raises(NotImplementedError):
        dt.kernels.Kernel()(1,
                            2)  # base class does not implement call operator
    k = GaussianKernel(1.)
    with assert_raises(ValueError):
        k * "weird object"  # product kernel only supported with other kernels
Beispiel #2
0
def test_score():
    kernel = GaussianKernel(1.)
    dataset = bickley_jet(n_particles=100, n_jobs=1)
    ds_2d = dataset.endpoints_dataset()
    ds_3d = ds_2d.to_3d().cluster(4)
    ref_score = KVAD(kernel, epsilon=1e-6).fit_fetch(ds_3d).score
    with torch.no_grad():
        chi_x = torch.from_numpy(ds_3d.data)
        y = torch.from_numpy(ds_3d.data_lagged)
        score_net = kvad_score(chi_x, y, kernel=kernel).numpy()
    np.testing.assert_almost_equal(score_net, ref_score, decimal=1)
===================================================

This example shows an application of :class:`KernelCCA <deeptime.decomposition.KernelCCA>` on the
:meth:`bickley jet <deeptime.data.bickley_jet>` dataset. One can cluster in the singular function space
to find coherent structures.
"""
import matplotlib.pyplot as plt
import numpy as np

from deeptime.clustering import KMeans
from deeptime.data import bickley_jet
from deeptime.decomposition import KernelCCA
from deeptime.kernels import GaussianKernel

dataset = bickley_jet(n_particles=1000, n_jobs=8).endpoints_dataset()
kernel = GaussianKernel(.7)

estimator = KernelCCA(kernel, n_eigs=5, epsilon=1e-3)
model = estimator.fit((dataset.data, dataset.data_lagged)).fetch_model()

ev_real = np.real(model.eigenvectors)
kmeans = KMeans(n_clusters=7, n_jobs=8).fit(ev_real)
kmeans = kmeans.fetch_model()

fig = plt.figure()
gs = fig.add_gridspec(ncols=2, nrows=3)

ax = fig.add_subplot(gs[0, 0])
ax.scatter(*dataset.data.T, c=ev_real[:, 0])
ax.set_title('1st Eigenfunction')
Beispiel #4
0
    return X, Y


def test_base():
    with assert_raises(NotImplementedError):
        dt.kernels.Kernel()(1,
                            2)  # base class does not implement call operator
    k = GaussianKernel(1.)
    with assert_raises(ValueError):
        k * "weird object"  # product kernel only supported with other kernels


@pytest.mark.parametrize(
    "kernel",
    [
        GaussianKernel(1.),
        GaussianKernel(2.),
        GaussianKernel(3.),  # some Gaussian kernels
        GaussianKernel(1., impl='binomial'),
        GaussianKernel(
            3., impl='binomial'),  # some Gaussian kernels, binomial impl
        GeneralizedGaussianKernel(np.linspace(
            3, 5, num=7)),  # a generalized Gaussian kernel
        LaplacianKernel(3.3),  # a Laplacian kernel
        PolynomialKernel(3, 1.),
        PolynomialKernel(7, 3.3),  # some polynomial kernels
        PolynomialKernel(3, 1.) * GaussianKernel(3.) *
        LaplacianKernel(5.),  # product kernel
        PolynomialKernel(3, 1.) *
        GeneralizedGaussianKernel(np.linspace(3, 5, num=7)) *
        LaplacianKernel(5.)  # product k.
Beispiel #5
0
@pytest.fixture
def data():
    X = np.random.normal(size=(50, 7))
    Y = np.random.normal(size=(30, 7))
    return X, Y


def test_base():
    with assert_raises(NotImplementedError):
        dt.kernels.Kernel()(1, 2)  # base class does not implement call operator
    k = GaussianKernel(1.)
    with assert_raises(ValueError):
        k * "weird object"  # product kernel only supported with other kernels


@pytest.mark.parametrize("kernel", [
    GaussianKernel(1.), GaussianKernel(2.), GaussianKernel(3.),  # some Gaussian kernels
    GaussianKernel(1., impl='binomial'), GaussianKernel(3., impl='binomial'),  # some Gaussian kernels, binomial impl
    GeneralizedGaussianKernel(np.linspace(3, 5, num=7)),  # a generalized Gaussian kernel
    LaplacianKernel(3.3),  # a Laplacian kernel
    PolynomialKernel(3, 1.), PolynomialKernel(7, 3.3),  # some polynomial kernels
    PolynomialKernel(3, 1.) * GaussianKernel(3.) * LaplacianKernel(5.),  # product kernel
    PolynomialKernel(3, 1.) * GeneralizedGaussianKernel(np.linspace(3, 5, num=7)) * LaplacianKernel(5.)  # product k.
], ids=lambda k: str(k))
def test_consistency(data, kernel):
    xy_gram = kernel.apply(*data)
    assert_equal(xy_gram.shape, (50, 30))
    for i in range(50):
        for j in range(30):
            assert_almost_equal(xy_gram[i, j], kernel(data[0][i], data[1][j]), decimal=5)
Beispiel #6
0
clustering.
"""

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

from deeptime.clustering import Kmeans
from deeptime.data import sqrt_model
from deeptime.decomposition import KernelCCA
from deeptime.kernels import GaussianKernel

dtraj, obs = sqrt_model(1500)
dtraj_test, obs_test = sqrt_model(5000)

kernel = GaussianKernel(2.)
est = KernelCCA(kernel, n_eigs=2)
model = est.fit((obs[1:], obs[:-1])).fetch_model()
evals = model.transform(obs_test)
clustering = Kmeans(2).fit(np.real(model.transform(obs))).fetch_model()
assignments = clustering.transform(np.real(evals))

n_mismatch = np.sum(np.abs(assignments - dtraj_test))
assignments_perm = np.where((assignments == 0) | (assignments == 1),
                            assignments ^ 1, assignments)
n_mismatch_perm = np.sum(np.abs(assignments_perm - dtraj_test))

if n_mismatch_perm < n_mismatch:
    assignments = assignments_perm
    n_mismatch = n_mismatch_perm