def test_fit_transform_hyperbolic(self):
     point = gs.array([2., 1., 1., 1.])
     points = gs.array([point, point])
     transformer = ToTangentSpace(geometry=self.hyperbolic.metric)
     result = transformer.fit_transform(X=points)
     expected = gs.zeros_like(points)
     self.assertAllClose(expected, result)
 def test_inverse_transform_hyperbolic(self):
     points = self.hyperbolic.random_uniform(10)
     transformer = ToTangentSpace(geometry=self.hyperbolic.metric)
     X = transformer.fit_transform(X=points)
     result = transformer.inverse_transform(X)
     expected = points
     self.assertAllClose(expected, result)
示例#3
0
 def test_inverse_transform_spd(self):
     point = SPDMatrices(3).random_uniform(10)
     transformer = ToTangentSpace(geometry=SPDMetricAffine(3))
     X = transformer.fit_transform(X=point)
     result = transformer.inverse_transform(X)
     expected = point
     self.assertAllClose(expected, result, atol=1e-4)
 def test_estimate_transform_spd(self):
     point = spd.SPDMatrices(3).random_uniform()
     points = gs.stack([point, point])
     transformer = ToTangentSpace(geometry=spd.SPDMetricAffine(3))
     transformer.fit(X=points)
     result = transformer.transform(points)
     expected = gs.zeros((2, 6))
     self.assertAllClose(expected, result, atol=1e-5)
 def test_estimate_transform_sphere(self):
     point = gs.array([0., 0., 0., 0., 1.])
     points = gs.array([point, point])
     transformer = ToTangentSpace(geometry=self.sphere)
     transformer.fit(X=points)
     result = transformer.transform(points)
     expected = gs.zeros_like(points)
     self.assertAllClose(expected, result)
    def test_estimate_transform_so_group(self):
        point = self.so_matrix.random_uniform()
        points = gs.array([point, point])

        transformer = ToTangentSpace(geometry=self.so_matrix)
        transformer.fit(X=points)
        result = transformer.transform(points)
        expected = gs.zeros((2, 6))
        self.assertAllClose(expected, result)
 def test_inverse_transform_no_fit_sphere(self):
     point = self.sphere.random_uniform(3)
     base_point = point[0]
     point = point[1:]
     transformer = ToTangentSpace(geometry=self.sphere)
     X = transformer.transform(point, base_point=base_point)
     result = transformer.inverse_transform(X, base_point=base_point)
     expected = point
     self.assertAllClose(expected, result)
示例#8
0
 def test_inverse_transform_so(self):
     point = self.so_matrix.random_uniform(10)
     transformer = ToTangentSpace(
         geometry=self.so_matrix.bi_invariant_metric)
     X = transformer.transform(X=point, base_point=self.so_matrix.identity)
     result = transformer.inverse_transform(
         X, base_point=self.so_matrix.identity)
     expected = point
     self.assertAllClose(expected, result)
示例#9
0
    for idx, data in enumerate(tqdm(test_dataset)):
        if idx == num_images:
            break
        features = np.concatenate((features, data[0].reshape((1, image_size)).numpy()))
        labels.append(data[1])

    labels = np.array(labels)
    pca = PCA(n_components=2)
    features = pca.fit_transform(features)

    scaler = StandardScaler()
    features = scaler.fit_transform(features) * 3
    features = np.concatenate((features, np.zeros_like(features[:, 0:1])), axis=1)

    sphere = Hypersphere(dim=2)
    transformer = ToTangentSpace(sphere)
    base_point = np.array([0, 0, 1])
    s_points = transformer.inverse_transform(features, base_point)

    classifier = KNearestNeighborsClassifier()
    classifier.fit(s_points, labels)

    f_labels = []

    def loss_f(x):
        label = classifier.predict(x[np.newaxis, :])
        f_labels.append(label)
        return label == 0

    fig = plt.figure(figsize=(10, 10))
    ax = fig.add_subplot(111, projection='3d')