我正在尝试使用带有 Wasserstrain 距离的 t-SNE 而不是欧几里得。这是我的代码的一部分:
from sklearn.manifold import TSNE
from scipy.stats import wasserstein_distance
tsne = TSNE(n_components=2,perplexity=40, n_iter=1000, metric=wasserstein_distance)
img_embedded = tsne.fit_transform(images)
images
包含 512 张 64x64x3 的图像。有人可以告诉我我的代码是否真的符合我的要求吗?我不确定这metric=wasserstein_distance
是否正确。代码工作得很好,但是当我查看 2D 空间时,它看起来很糟糕。如果我使用欧几里得度量,则 2D 图像相当不错,所以我不确定 Wasserstrain 距离是否根本不适合我的问题,或者我是否以错误的方式实现它。谢谢!
编辑:图像是固定大小的对象,在固定背景上移动。理想情况下,考虑到每个图像的一切都是相同的,除了对象的位置,我希望 2D 表示将显示对象的轨迹,即每个图像中对象的 x 和 y(或至少一些它们的可逆变换)。下面我附上了使用欧几里得距离(第一个)和 Wasserstein 距离(第二个)获得的图像。正如您所看到的,在第一种情况下,轨迹非常清晰(例如,线大多在它们应该相交的地方相交,因此拓扑大部分被保留)。在第二种情况下,一团糟。