在分析数据时,有时要计算流形上两点之间的测地距离。本着有现成轮子绝对不自己写的观点,发现可以通过以下方式计算流形上任意两点之间的测地距离。
ISOMAP是一种保持测地距离不变的高维空间中低维流形的降维方法。在sklearn包中实现了其功能,并用dist_matrix_属性返回训练数据两两之间的测地距离。
所以可以利用Isomap函数来计算任意两点之间的测地距离。具体示例如下:
import numpy as np
from sklearn.manifold import Isomap
data = np.load("samples_data.npy")
isomap = Isomap(n_components=2,n_neighbors=5,path_method="auto")
data_2d = isomap.fit_transform(X=data)
geo_distance_metrix = isomap.dist_matrix_ # 测地距离矩阵,shape=[n_sample,n_sample]
sklearn.manifold.Isomap的介绍见:https://scikit-learn.org/stable/modules/generated/sklearn.manifold.Isomap.html