2D Gaussians¶
Two gaussians¶
[1]:
import matplotlib.pyplot as plt
import numpy as np
from fastabx import Dataset, Score, Task
n = 100
diagonal_shift = 4
mean = np.zeros(2)
cov = np.array([[4, -2], [-2, 3]])
rng = np.random.default_rng(seed=0)
first = rng.multivariate_normal(mean, cov, n)
second = rng.multivariate_normal(mean + np.ones(2) * diagonal_shift, cov, n)
dataset = Dataset.from_numpy(np.vstack([first, second]), {"label": [0] * n + [1] * n})
task = Task(dataset, on="label")
score = Score(task, "euclidean")
plt.scatter(*first.T, alpha=0.5)
plt.scatter(*second.T, alpha=0.5)
plt.axis("equal")
plt.grid()
plt.title(f"ABX: {score.collapse():.3%}")
plt.show()

Two gaussians with increasing shift¶
[2]:
import matplotlib.pyplot as plt
import numpy as np
from fastabx import Dataset, Score, Task
n = 100
shift = np.ones(1)
mean = np.zeros(2)
cov = np.array([[4, -2], [-2, 3]])
rng = np.random.default_rng(seed=0)
first = rng.multivariate_normal(mean, cov, n)
second = rng.multivariate_normal(mean, cov, n)
fig, axes = plt.subplots(figsize=(10, 8), nrows=3, ncols=3, sharex=True, sharey=True)
for ax in axes.flatten():
dataset = Dataset.from_numpy(np.vstack([first, second]), {"label": [0] * n + [1] * n})
task = Task(dataset, on="label")
score = Score(task, "euclidean")
ax.scatter(*first.T, s=10, alpha=0.5)
ax.scatter(*second.T, s=10, alpha=0.5)
ax.grid()
ax.set_title(f"ABX: {score.collapse():.3%}")
second += shift
plt.show()
