def tangent_pca(self, points, base_point=None, point_type='vector'): """Perform tPCA of points on the tangent space at a base point. Tangent Principal Component Analysis (tPCA) of points on the tangent space at a base point. Parameters ---------- points base_point point_type Returns ------- eigenvalues tangent_eigenvecs """ if point_type == 'matrix': raise NotImplementedError( 'This is currently only implemented for vectors.') if base_point is None: base_point = self.mean(points) tangent_vecs = self.log(points, base_point=base_point) covariance_mat = gs.cov(tangent_vecs.transpose()) eigenvalues, tangent_eigenvecs = gs.linalg.eig(covariance_mat) idx = eigenvalues.argsort()[::-1] eigenvalues = eigenvalues[idx] tangent_eigenvecs = tangent_eigenvecs[idx] return eigenvalues, tangent_eigenvecs
def tangent_pca(self, points, base_point=None): """ Tangent Principal Component Analysis (tPCA) of points on the tangent space at a base point. """ # TODO(nina): It only works for points of ndim=2, adapt to other ndims. if base_point is None: base_point = self.mean(points) tangent_vecs = self.log(points, base_point=base_point) covariance_mat = gs.cov(tangent_vecs.transpose()) eigenvalues, tangent_eigenvecs = gs.linalg.eig(covariance_mat) idx = eigenvalues.argsort()[::-1] eigenvalues = eigenvalues[idx] tangent_eigenvecs = tangent_eigenvecs[idx] return eigenvalues, tangent_eigenvecs
def tangent_pca(self, points, base_point=None): """ Tangent Principal Component Analysis (tPCA) at base_point. This is standard PCA on the Riemannian Logarithms of the points at the base point. """ # TODO(xxx): It only works for points of ndim=2, adapt to other ndims. if base_point is None: base_point = self.mean(points) tangent_vecs = self.log(points, base_point=base_point) covariance_mat = gs.cov(tangent_vecs.transpose()) eigenvalues, tangent_eigenvecs = gs.linalg.eig(covariance_mat) idx = eigenvalues.argsort()[::-1] eigenvalues = eigenvalues[idx] tangent_eigenvecs = tangent_eigenvecs[idx] return eigenvalues, tangent_eigenvecs