R

时间:2017-04-12 19:20:10

标签: r machine-learning dimensionality-reduction

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

示例:假设我的目标是将K变量减少到 D = 2 维度(通常, D = 2 D对于t-SNE,= 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模型为我的测试数据返回维度{1}}(1x2)。像,

pred

(怎么样)这可能吗?你能帮我解决这个问题吗?

4 个答案:

答案 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仅用于可视化低(2或3)维空间中的数据集。您可以同时为所有数据提供所有数据。它不是通用的降维工具。

如果您尝试将t-SNE应用于“新”数据,您可能没有正确地考虑您的问题,或者可能只是不了解t-SNE的目的。