gpt4 book ai didi

python - 为什么 sklearn.manifold 中的 TSNE 对相同的值给出不同的答案?

转载 作者:行者123 更新时间:2023-11-28 17:16:42 24 4
gpt4 key购买 nike

from sklearn.manifold import TSNE
tsne = TSNE(n_components=2, init='pca', n_iter=5000)

print(tsne.fit_transform(np.array([[1,2,3],[3,4,3],[1,2,3],[3,3,3]])))

输出:

[[ 547.9452404    11.31943926]
[-152.33035505 -223.32060683]
[ 97.57201578 84.04839505]
[-407.18939464 124.50285141]]

对于重复两次的向量 [1,2,3],它给出了不同的值/向量。

为什么会这样?

编辑1:

上面给出的例子只是一个用来说明事实的玩具例子。实际上我的数据是形状为 (500,100) 的 numpy 数组。仍然存在同样的问题。

最佳答案

这是一个有趣的问题。 TSNE 将样本转换到一个不同的空间,保留它们之间的距离,但它不保证保留数据样本的。它将每个样本视为一个不同的点,并尝试将该点到每个其他样本的距离映射到另一个空间。这不考虑样本的,只考虑它与其他所有点的相对距离。

您可以检查:

>>> a = np.array([[1,2,3],[3,4,3],[1,2,3],[3,3,3]])
>>> b = TSNE(n_components=2)
>>> from sklearn.metrics import euclidean_distances
>>> print(euclidean_distances(b[0], b).sum())
2498.7985853798709
>>> print(euclidean_distances(b[2], b).sum())
2475.26750924
>>> print(b)
[[-201.41082311 361.14132525]
[-600.23416334 -523.48599925]
[ 180.07532649 -288.01414955]
[ 553.42486539 538.85793453]]

它大致保留了两个样本与每个其他样本的相似距离(考虑到比例),尽管它们具有不同的表示。

关于为什么只有 4 个样本那么糟糕,我猜你只有 4 个样本和 3 个维度。 TSNE 无法用如此少的样本推断出正确的映射。它应该可以处理高维数据(以及它的多个样本)。

对于低维数据,我会说一个简单的 PCA 就可以完成这项工作。 PCA 您的数据并保留前 2 个维度。

关于python - 为什么 sklearn.manifold 中的 TSNE 对相同的值给出不同的答案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43776976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com