def test_hypersphere_kmeans_init_array(self): n_features = 4 n_clusters = 3 manifold = hypersphere.Hypersphere(n_features - 1) centroids = manifold.random_von_mises_fisher(kappa=10, n_samples=n_clusters) self._test_hypersphere_kmeans_init( centroids, n_features=n_features, n_clusters=n_clusters )
def test_hypersphere_kmedoids_fit(self): gs.random.seed(55) manifold = hypersphere.Hypersphere(2) metric = hypersphere.HypersphereMetric(2) data = manifold.random_von_mises_fisher(kappa=100, n_samples=200) kmedoids = RiemannianKMedoids(metric=metric, n_clusters=1) center = kmedoids.fit(data) self.assertTrue(manifold.belongs(center))
def test_hypersphere_kmeans_fit(self): gs.random.seed(55) manifold = hypersphere.Hypersphere(2) metric = hypersphere.HypersphereMetric(2) x = manifold.random_von_mises_fisher(kappa=100, n_samples=200) kmeans = RiemannianKMeans(metric, 1, tol=1e-3) kmeans.fit(x) center = kmeans.centroids mean = metric.mean(x) result = metric.dist(center, mean) expected = 0. self.assertAllClose(expected, result, atol=1e-2)
def test_hypersphere_kmeans_predict(self): gs.random.seed(1234) manifold = hypersphere.Hypersphere(2) metric = hypersphere.HypersphereMetric(2) x = manifold.random_von_mises_fisher(kappa=100, n_samples=200) kmeans = RiemannianKMeans(metric, 5, tol=1e-5) kmeans.fit(x, max_iter=100) result = kmeans.predict(x) centroids = kmeans.centroids expected = gs.array([int(metric.closest_neighbor_index(x_i, centroids)) for x_i in x]) self.assertAllClose(expected, result)
def test_hypersphere_kmedoids_predict(self): gs.random.seed(1234) dim = 2 manifold = hypersphere.Hypersphere(dim) metric = hypersphere.HypersphereMetric(dim) data = manifold.random_von_mises_fisher(kappa=100, n_samples=200) kmedoids = RiemannianKMedoids(metric, n_clusters=5) centroids = kmedoids.fit(data, max_iter=100) result = kmedoids.predict(data) expected = gs.array([ int(metric.closest_neighbor_index(x_i, centroids)) for x_i in data ]) self.assertAllClose(expected, result)
def test_hypersphere_kmeans_initialization(self): gs.random.seed(55) manifold = hypersphere.Hypersphere(2) metric = hypersphere.HypersphereMetric(2) x = manifold.random_von_mises_fisher(kappa=100, n_samples=200) n_clusters = 3 kmeans = RiemannianKMeans( metric, n_clusters, init_step_size=1.0, tol=1e-3, init="kmeans++" ) kmeans.fit(x) centroids = kmeans.centroids result = centroids.shape expected = (n_clusters, 3) self.assertAllClose(expected, result)
def test_hypersphere_kmeans_fit(self): gs.random.seed(55) manifold = hypersphere.Hypersphere(2) metric = hypersphere.HypersphereMetric(2) x = manifold.random_von_mises_fisher(kappa=100, n_samples=200) kmeans = RiemannianKMeans(metric, 1, init_step_size=1.0, tol=1e-3) kmeans.fit(x) center = kmeans.centroids mean = FrechetMean(metric=metric, init_step_size=1.0) mean.fit(x) result = metric.dist(center, mean.estimate_) expected = 0.0 self.assertAllClose(expected, result)
def _test_hypersphere_kmeans_init( self, init, *, n_features=4, n_clusters=3, seed=1 ): gs.random.seed(seed) manifold = hypersphere.Hypersphere(n_features - 1) x = manifold.random_von_mises_fisher(kappa=100, n_samples=200) kmeans = RiemannianKMeans( manifold.metric, n_clusters, init_step_size=1.0, tol=1e-3, init=init ) kmeans.fit(x) centroids = kmeans.centroids result = centroids.shape expected = (n_clusters, n_features) self.assertAllClose(expected, result)
def make_centroids(X, n_clusters): n_features = X.shape[1] manifold = hypersphere.Hypersphere(n_features - 1) centroids = manifold.random_von_mises_fisher(kappa=10, n_samples=n_clusters) return centroids