为t-SNE模型添加新的点



我尝试在scikit学习中使用t-SNE算法:

import numpy as np
from sklearn.manifold import TSNE
X = np.array([[0, 0, 0], [0, 1, 1], [1, 0, 1], [1, 1, 1]])
model = TSNE(n_components=2, random_state=0)
np.set_printoptions(suppress=True)
model.fit_transform(X) 

输出:

array([[ 0.00017599,  0.00003993], #1
[ 0.00009891,  0.00021913], 
[ 0.00018554, -0.00009357],
[ 0.00009528, -0.00001407]]) #2

之后,我尝试将一些坐标与第一个数组X中的坐标完全相同的点添加到现有模型中:

Y = np.array([[0, 0, 0], [1, 1, 1]])
model.fit_transform(Y) 

输出:

array([[ 0.00017882,  0.00004002], #1
[ 0.00009546,  0.00022409]]) #2

但是第二数组中的坐标不等于第一数组中的第一个和最后一个坐标。

我知道这是正确的行为,但我如何向model添加新的坐标,并在输出数组中为输入数组中的相同坐标获得相同的坐标

此外,即使添加了新的点,我仍然需要获得最接近的点。

从这里引用t-SNE的作者:https://lvdmaaten.github.io/tsne/

一旦我有了t-SNE映射,我如何将传入的测试点嵌入到该映射中?

t-SNE学习非参数映射,这意味着它不学习将数据从输入空间映射到映射的显式函数。因此,不可能在现有地图中嵌入测试点(尽管您可以在完整的数据集上重新运行t-SNE)。处理这一问题的一种潜在方法是训练多元回归器,根据输入数据预测地图位置。或者,你也可以直接使t-SNE损失最小化,这就是我在本文中所做的。

此外,stats.stackexchange.com上的这个答案包含想法和链接

一个非常好并且非常快的t-SNE的最新Python实现https://github.com/pavlin-policar/openTSNE允许嵌入开箱即用的新点

和链接https://github.com/berenslab/rna-seq-tsne/.

相关内容

  • 没有找到相关文章

最新更新