目标:我的目标是在R中使用t-SNE(t分布式随机邻域嵌入)来减少训练数据的维数(使用 N 观察和 K 变量,其中 K>> N ),随后旨在为我的测试数据提供t-SNE表示。
示例:假设我的目标是将K变量减少到 D = 2 维度(通常, D = 2 或 D对于t-SNE,= 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模型为我的测试数据返回维度{1}}(1x2)。像,
pred
(怎么样)这可能吗?你能帮我解决这个问题吗?
答案 0 :(得分:6)
来自作者本人(https://lvdmaaten.github.io/tsne/):
一旦我有了一个t-SNE地图,我怎样才能在其中嵌入传入的测试点 地图吗?
t-SNE学习非参数映射,这意味着它不会 学习一个显式函数,将数据从输入空间映射到 地图。因此,不可能在现有中嵌入测试点 map(尽管您可以在完整数据集上重新运行t-SNE)。潜力 解决这个问题的方法是培养一个多变量回归量 从输入数据预测地图位置。或者,你 还可以使这样的回归量直接最小化t-SNE损失, 这就是我在本文中所做的(https://lvdmaaten.github.io/publications/papers/AISTATS_2009.pdf)。
因此您无法直接应用新数据点。但是,您可以在数据和嵌入维度之间拟合多元回归模型。作者认识到这是该方法的局限性,并建议通过这种方式来解决它。
答案 1 :(得分:4)
SNE并不是真的这样:
以下是来自t-SNE作者网站(https://lvdmaaten.github.io/tsne/)的专家:
一旦我有了一个t-SNE地图,我怎样才能在其中嵌入传入的测试点 地图吗?
t-SNE学习非参数映射,这意味着它不会 学习一个显式函数,将数据从输入空间映射到 地图。因此,不可能在现有中嵌入测试点 map(尽管您可以在完整数据集上重新运行t-SNE)。潜力 解决这个问题的方法是培养一个多变量回归量 从输入数据预测地图位置。或者,你 还可以使这样的回归量直接最小化t-SNE损失, 这就是我在本文中所做的。
您可能对他的论文感兴趣:https://lvdmaaten.github.io/publications/papers/AISTATS_2009.pdf
此网站除了非常酷,还提供有关t-SNE的丰富信息:http://distill.pub/2016/misread-tsne/
On Kaggle我也看到人们做这样的事情也可能是有趣的: https://www.kaggle.com/cherzy/d/dalpozz/creditcardfraud/visualization-on-a-2d-map-with-t-sne
答案 2 :(得分:3)
这是Rtsne包裹的作者(Jesse Krijthe)的邮件回答:
感谢您提出非常具体的问题。我有一个早先的请求 这是一个关于GitHub的公开问题 (https://github.com/jkrijthe/Rtsne/issues/6)。我的主要原因 从某种意义上说,犹豫是否实施这样的事情 不自然&#39;方式解释了预测对tsne的意义。 对我来说,tsne是一种可视化距离矩阵的方法。因此,一个新的 样本将导致一个新的距离矩阵,因此是一个新的 可视化。所以,我目前的想法是唯一合理的方式 将重新运行火车和测试装置上的tsne程序 组合
话虽如此,其他人确实认为定义是有意义的 预测,例如通过保持列车对象固定在 映射并找到测试对象的良好位置(如建议的那样) 在这个问题上)。我个人更喜欢这种做法 像Laurens van der Maaten(the tsne论文的作者)探讨了一篇论文。但是,这是最好的 使用除我的包之外的其他东西来实现,因为 参数模型如果被选中则可能是最有效的 用户。
所以我的建议是1)使用所有数据重新映射或2) 看看你是否能找到参数tsne的实现,唯一的一个 我知道将是劳伦斯的Matlab实现。
抱歉,我无法提供更多帮助。如果你想出任何其他/更好的 解决方案,请告诉我。
答案 3 :(得分:0)
如果您尝试将t-SNE应用于“新”数据,您可能没有正确地考虑您的问题,或者可能只是不了解t-SNE的目的。