是否存在用于在不同范数的向量空间之间转换坐标的python算法?

问题描述

假设我有一个kxn数据数组,其中包含向量列和在这些向量上定义的距离函数。如何将kxn数组转换为相同形状的另一个数组,以使转换后的向量中的欧几里得范数是由给定距离函数得出的范数?我知道您可以通过给定的距离函数直接计算数据的距离矩阵,从而得出R ^ k中的坐标。但是,此方法确实非常昂贵,尤其是当距离函数的复杂度为O(n ^ 2)或更大时。所以我想知道是否有更简单的算法可以做到这一点。

解决方法

听起来您正在描述multidimension scaling (MDS)。在Python中执行此操作的一种方法是使用scikit-learn的sklearn.manifold.MDS

MDS希望将NxN距离(或“不相似”)矩阵作为输入,因此不会绕过评估距离函数的成本。这种转换不可避免地需要距离矩阵,因此,如果距离函数本身很昂贵,那么看来最好的办法是减少样本数量或寻找一种方法来计算快速近似距离以加快速度。另外,请注意,MDS通常仅是近似值。数值优化寻找欧几里得范数与给定距离的最佳拟合。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...