目标:我的目标是在R中使用t-SNE(t分布随机邻居嵌入)来减少训练数据的维数(具有N个观测值和K个变量,其中K >> N),随后旨在提出t-SNE我的测试数据的SNE表示形式。

示例:假设我打算将K变量减小为D = 2维(对于t-SNE通常为D = 2或D = 3)。有两个R包:Rtsnetsne,而我在这里使用前者。

# load packages
library(Rtsne)

# Generate Training Data: random standard normal matrix with J=400 variables and N=100 observations
x.train <- matrix(nrom(n=40000, mean=0, sd=1), nrow=100, ncol=400)

# Generate Test Data: random standard normal vector with N=1 observation for J=400 variables
x.test <- rnorm(n=400, mean=0, sd=1)

# perform t-SNE
set.seed(1)
fit.tsne <- Rtsne(X=x.train, dims=2)


命令fit.tsne$Y将返回包含数据的t-SNE表示的(100x2)维对象;也可以通过plot(fit.tsne$Y)绘制。

问题:现在,我正在寻找的是一个函数,该函数基于训练的t-SNE模型返回我的测试数据的尺寸(1x2)的预测pred。就像是,

# The function I am looking for (but doesn't exist yet):
pred <- predict(object=fit.tsne, newdata=x.test)


(这怎么可能?你能帮我吗?

最佳答案

来自作者本人(https://lvdmaaten.github.io/tsne/):


  有了t-SNE地图后,如何在其中嵌入传入的测试点
  地图?
  
  t-SNE学习非参数映射,这意味着它不会
  学习一个显式函数,将数据从输入空间映射到
  地图。因此,不可能将测试点嵌入现有的
  地图(尽管您可以在完整数据集上重新运行t-SNE)。潜力
  解决这个问题的方法是训练多元回归
  从输入数据预测地图位置。或者,你
  也可以使这种回归器直接将t-SNE损失最小化,
  这就是我在本文中所做的(https://lvdmaaten.github.io/publications/papers/AISTATS_2009.pdf)。


因此,您不能直接应用新的数据点。但是,您可以在数据和嵌入维之间拟合多元回归模型。作者意识到这是该方法的局限性,并建议采用这种方法来解决它。

08-24 14:05