目标:我的目标是在R中使用t-SNE(t分布随机邻居嵌入)来减少训练数据的维数(具有N个观测值和K个变量,其中K >> N),随后旨在提出t-SNE我的测试数据的SNE表示形式。
示例:假设我打算将K变量减小为D = 2维(对于t-SNE通常为D = 2或D = 3)。有两个R包:Rtsne
和tsne
,而我在这里使用前者。
# 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)。
因此,您不能直接应用新的数据点。但是,您可以在数据和嵌入维之间拟合多元回归模型。作者意识到这是该方法的局限性,并建议采用这种方法来解决它。