Examples¶
The files in examples/ are directly runnable and are included in the
documentation source with literalinclude.
Basic KDE¶
"""Fit and evaluate an exact one-dimensional KDE."""
import numpy as np
from kern import KernelDensity
rng = np.random.default_rng(0)
data = rng.normal(size=1_000)
points = np.linspace(-3.0, 3.0, 200)
model = KernelDensity(bandwidth=0.25, kernel="gaussian").fit(data)
density = model.evaluate(points)
print(density[:5])
Bandwidth selection¶
"""Select a bandwidth for one kernel using log-likelihood."""
import numpy as np
from kern import BandwidthSelector, default_bandwidth_grid
rng = np.random.default_rng(1)
data = rng.normal(size=1_000)
# Omit grid to use the default.
automatic = BandwidthSelector(
kernel="gaussian",
cv="loo",
).fit(data)
# Or construct and pass a custom grid.
grid = default_bandwidth_grid(data, size=64, minimum=0.05, maximum=0.8)
custom = BandwidthSelector(
grid=grid,
kernel="epanechnikov",
cv=5,
parallel="evaluation",
).fit(data)
print(automatic.kernel_, automatic.best_bandwidth_)
print(custom.kernel_, custom.best_bandwidth_)
Approximate and multivariate KDE¶
"""Use approximate and multivariate KDE."""
import numpy as np
from kern import ApproximateKernelDensity, MultivariateKernelDensity
rng = np.random.default_rng(2)
data = rng.normal(size=2_000)
points = np.linspace(-3.0, 3.0, 200)
approximate = ApproximateKernelDensity(
bandwidth=0.25,
cutoff=3.5,
memory="auto",
).fit(data)
print(approximate.evaluate(points)[:5])
# Out: [0.00523714 0.00582754 0.00646412 0.00715279 0.00789581]
matrix = rng.normal(size=(1_000, 3))
multivariate = MultivariateKernelDensity(
bandwidth=0.4,
kernel="gaussian",
block_size=32,
).fit(matrix)
print(multivariate.evaluate(matrix[:5]))
# [0.01052811 0.01548928 0.00208585 0.02895958 0.03646734]