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
        )
Beispiel #2
0
    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))
Beispiel #3
0
    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)
Beispiel #4
0
    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)
Beispiel #5
0
    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