【问题标题】:Dimension reduction:T-SNE, PCA are not preserving the Euclidean distance降维:T-SNE、PCA不保留欧几里得距离
【发布时间】:2016-10-18 22:12:29
【问题描述】:

我的数据存在 128 个维度,我试图将我的数据减少到 3 个维度以可视化我的数据并保留欧几里得距离。那么距离代表两个数据点之间的相似度。

原始数据X:5 * 128(5个数据点)

[[ -4.46e-02   1.57e-01   2.17e-01   1.24e-01   6.01e-02   7.61e-02
    6.38e-02  -1.05e-01  -2.55e-02   5.99e-02  -8.38e-02   5.93e-02
   -1.58e-01  -1.05e-01   1.31e-01  -5.33e-02  -4.18e-02   9.32e-02
   -1.62e-02  -9.19e-02  -1.30e-01   8.56e-02  -6.13e-02   3.78e-02
    7.84e-02  -9.74e-02  -9.42e-02   7.47e-02  -4.65e-02   7.36e-03
   -9.19e-04   1.37e-01  -8.52e-02   9.27e-02   6.50e-02  -2.61e-02
    7.21e-02  -1.83e-01  -2.49e-02  -9.85e-03   1.57e-01  -7.98e-02
    1.50e-01  -1.40e-01  -2.39e-02   4.19e-02   6.98e-02  -1.27e-02
   -7.56e-02   4.44e-02   1.86e-01  -2.22e-03  -1.79e-02  -3.90e-02
    7.72e-02   4.47e-02  -8.15e-02  -4.31e-02  -6.52e-03   7.73e-02
   -1.37e-02   5.78e-02  -1.25e-01  -1.58e-01   1.37e-01   9.34e-02
   -6.07e-03  -1.69e-01  -2.12e-01   2.14e-01  -4.05e-02   1.29e-01
    4.42e-02   1.71e-01  -2.13e-02   8.00e-03   7.17e-02   4.57e-03
   -6.55e-03  -1.66e-01   3.73e-02   1.01e-01  -1.26e-03   1.96e-02
    5.44e-02  -1.04e-01  -5.32e-02  -1.57e-02  -6.31e-02   1.89e-01
    2.43e-02   1.59e-02   9.13e-03  -4.41e-02  -5.96e-03   1.03e-01
    4.33e-02  -3.94e-02   7.85e-02   3.61e-02  -2.32e-02   3.69e-03
   -9.57e-03  -1.47e-02   2.61e-02  -4.15e-04   1.41e-02  -4.22e-02
   -7.42e-02   1.07e-01   9.08e-03   3.45e-02   6.41e-02  -5.37e-02
    1.57e-02  -1.91e-01   8.21e-02   3.31e-02   3.57e-02   1.37e-02
    1.56e-01   6.25e-02   4.54e-02  -1.07e-02   1.08e-01   2.69e-02
    9.57e-02  -1.24e-01]
...
]

原始距离矩阵dist:

dist = DataArray(squareform(pdist(X, 'euclidean')))

[[ 0.  ,  0.67,  0.62,  0.7 ,  0.67],
 [ 0.67,  0.  ,  0.48,  0.76,  0.46],
 [ 0.62,  0.48,  0.  ,  0.7 ,  0.48],
 [ 0.7 ,  0.76,  0.7 ,  0.  ,  0.6 ],
 [ 0.67,  0.46,  0.48,  0.6 ,  0.  ]]

T-SNE

from sklearn.manifold import TSNE

model = TSNE(n_components=3, random_state=0)
x_tsne = model.fit_transform(x)

x_tsne:

[[  1.78e-04   4.02e-05   1.01e-04]
 [  2.25e-04   1.90e-04  -1.00e-04]
 [  9.43e-05  -1.72e-05  -1.21e-05]
 [  4.02e-05   1.36e-05   1.49e-04]
 [  7.44e-05   1.08e-05   4.45e-05]]

dist_tsne:

[[  0.00e+00,   2.55e-04,   1.52e-04,   1.49e-04,   1.22e-04],
   [  2.55e-04,   0.00e+00,   2.60e-04,   3.57e-04,   2.75e-04],
   [  1.52e-04,   2.60e-04,   0.00e+00,   1.72e-04,   6.62e-05],
   [  1.49e-04,   3.57e-04,   1.72e-04,   0.00e+00,   1.10e-04],
   [  1.22e-04,   2.75e-04,   6.62e-05,   1.10e-04,   0.00e+00]]

我比较了 dist 和 dist_tsne,我发现它们的值不一样,甚至不成比例。如何在减小维度的同时保持欧几里得距离?

【问题讨论】:

    标签: matrix machine-learning computer-vision pca


    【解决方案1】:

    这在理论上一般是不可能的。

    您的原始数据存在于更多维度中,您不能在保留距离的同时丢弃其中的一些数据。

    一个例子:

    • 想象一个等边三角形的 3 个点(在二维空间中)
      • 每对点的距离相同
    • 尝试将此映射到一维序列(数轴)
      • 无法保持成对距离

    T-SNE 和其他人的任务是:将这些点映射到一些低维空间,同时保持视觉上的距离,以便我们人类掌握隐藏在许多维度中的一些信息。

    【讨论】:

    • 我听说过维度的诅咒。当您的功能增长时,您将拥有更差的聚类性能。然而,聚类是基于距离矩阵的。如果我不能在保持距离的同时降低维度(PCA),那么降维将如何提高聚类性能?
    • @BooYaah 我的例子并不是关于维度的诅咒。理论上,使用更多数据/时间总是可以击败 CoD。上面的例子总是不可能的(给定定义)。我不知道您在聚类之前从哪里得到预嵌入的想法以及您的期望。这种嵌入是聚类本身的另一种形式,在再次聚类之前会丢失信息(如上所述)。此外,您正在更改差异度量。 T-SNE 经过调整可以为我们的眼睛提供一些良好的表示,但它所做的数据转换可能会在之后的每一个算法中恶化。
    猜你喜欢
    • 2013-03-02
    • 1970-01-01
    • 2012-03-13
    • 2015-07-15
    • 2014-02-04
    • 1970-01-01
    • 2021-10-01
    相关资源
    最近更新 更多