Skip to content
Snippets Groups Projects
Commit 657fd50d authored by Amir MOHAMMADI's avatar Amir MOHAMMADI Committed by Yannick DAYER
Browse files

clean-up the tests

parent 1e71f9fd
Branches
Tags
1 merge request!40Transition to a pure python implementation
......@@ -152,7 +152,7 @@ class KMeansMachine(BaseEstimator):
"""
if trainer is None:
logger.info("Using default k-means trainer.")
trainer = KMeansTrainer(init_method="k-means||")
trainer = KMeansTrainer(init_method="k-means||", random_state=self.random_state)
logger.debug(f"Initializing trainer.")
trainer.initialize(
......
......@@ -8,7 +8,7 @@
"""Tests the KMeans machine
"""
import numpy
import numpy as np
from bob.learn.em.cluster import KMeansMachine
from bob.learn.em.cluster import KMeansTrainer
......@@ -16,45 +16,39 @@ from bob.learn.em.cluster import KMeansTrainer
import dask.array as da
def equals(x, y, epsilon):
return abs(x - y) < epsilon
def test_KMeansMachine():
# Test a KMeansMachine
means = numpy.array([[3, 70, 0], [4, 72, 0]], "float64")
mean = numpy.array([3, 70, 1], "float64")
means = np.array([[3, 70, 0], [4, 72, 0]], "float64")
mean = np.array([3, 70, 1], "float64")
# Initializes a KMeansMachine
km = KMeansMachine(2)
km.centroids_ = means
# Distance and closest mean
eps = 1e-10
assert equals(km.transform(mean)[0], 1, eps), km.transform(mean)[0].compute()
assert equals(km.transform(mean)[1], 6, eps), km.transform(mean)[1].compute()
np.testing.assert_almost_equal(km.transform(mean)[0], 1)
np.testing.assert_almost_equal(km.transform(mean)[1], 6)
(index, dist) = km.get_closest_centroid(mean)
assert index == 0
assert equals(dist, 1, eps)
assert equals(km.get_min_distance(mean), 1, eps)
assert index == 0, index
np.testing.assert_almost_equal(dist, 1.0)
np.testing.assert_almost_equal(km.get_min_distance(mean), 1)
def test_KMeansMachine_var_and_weight():
kmeans = KMeansMachine(2)
kmeans.centroids_ = numpy.array([[1.2, 1.3], [0.2, -0.3]])
kmeans.centroids_ = np.array([[1.2, 1.3], [0.2, -0.3]])
data = numpy.array([[1.0, 1], [1.2, 3], [0, 0], [0.3, 0.2], [0.2, 0]])
data = np.array([[1.0, 1], [1.2, 3], [0, 0], [0.3, 0.2], [0.2, 0]])
variances, weights = kmeans.get_variances_and_weights_for_each_cluster(data)
variances_result = numpy.array([[0.01, 1.0], [0.01555556, 0.00888889]])
weights_result = numpy.array([0.4, 0.6])
variances_result = np.array([[0.01, 1.0], [0.01555556, 0.00888889]])
weights_result = np.array([0.4, 0.6])
assert equals(weights_result, weights, 1e-3).all()
assert equals(variances_result, variances, 1e-3).all()
np.testing.assert_almost_equal(variances, variances_result)
np.testing.assert_almost_equal(weights, weights_result)
def test_kmeans_fit():
......@@ -62,12 +56,9 @@ def test_kmeans_fit():
data1 = da.random.normal(loc=1, size=(2000, 3))
data2 = da.random.normal(loc=-1, size=(2000, 3))
data = da.concatenate([data1, data2], axis=0)
machine = KMeansMachine(2).fit(data)
expected = da.array(
[[-0.99262315, -1.05226141, -1.00525245], [1.00426431, 1.00359693, 1.05996704]]
)
centroids = machine.centroids_.compute()
numpy.testing.assert_array_almost_equal(centroids, expected)
machine = KMeansMachine(2, random_state=0).fit(data)
expected = [[1.00426431, 1.00359693, 1.05996704], [-0.99262315, -1.05226141, -1.00525245]]
np.testing.assert_almost_equal(machine.centroids_, expected)
def test_kmeans_fit_init_pp():
......@@ -75,12 +66,10 @@ def test_kmeans_fit_init_pp():
data1 = da.random.normal(loc=1, size=(2000, 3))
data2 = da.random.normal(loc=-1, size=(2000, 3))
data = da.concatenate([data1, data2], axis=0)
trainer = KMeansTrainer(init_method="k-means++")
trainer = KMeansTrainer(init_method="k-means++", random_state=0)
machine = KMeansMachine(2).fit(data, trainer=trainer)
expected = da.array(
[[-0.99262315, -1.05226141, -1.00525245], [1.00426431, 1.00359693, 1.05996704]]
)
assert da.isclose(machine.centroids_, expected).all(), machine.centroids_.compute()
expected = [[-0.99262315, -1.05226141, -1.00525245], [1.00426431, 1.00359693, 1.05996704]]
np.testing.assert_almost_equal(machine.centroids_, expected)
def test_kmeans_fit_init_random():
......@@ -90,7 +79,5 @@ def test_kmeans_fit_init_random():
data = da.concatenate([data1, data2], axis=0)
trainer = KMeansTrainer(init_method="random", random_state=0)
machine = KMeansMachine(2).fit(data, trainer=trainer)
expected = da.array(
[[-0.99433738, -1.05561588, -1.01236246], [0.99800688, 0.99873325, 1.05879539]]
)
assert da.isclose(machine.centroids_, expected).all(), machine.centroids_.compute()
expected = [[-0.99433738, -1.05561588, -1.01236246], [0.99800688, 0.99873325, 1.05879539]]
np.testing.assert_almost_equal(machine.centroids_, expected)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment