t-SNE预测在R中的应用

目标:我希望在R中使用t-SNE(t分布随机邻域嵌入)对我的训练数据(包含N个观测和K个变量,其中K>>N)进行降维处理,并随后为我的测试数据生成t-SNE表示。

示例:假设我希望将K个变量降维到D=2维(通常,t-SNE使用D=2D=3)。有两个R包:Rtsnetsne,我在这里使用前者。

# 加载包
library(Rtsne)
# 生成训练数据:具有J=400个变量和N=100个观测的随机标准正态矩阵
x.train <- matrix(nrom(n=40000, mean=0, sd=1), nrow=100, ncol=400)
# 生成测试数据:具有N=1个观测和J=400个变量的随机标准正态向量
x.test <- rnorm(n=400, mean=0, sd=1)
# 执行t-SNE
set.seed(1)
fit.tsne <- Rtsne(X=x.train, dims=2)

其中命令fit.tsne$Y将返回包含数据t-SNE表示的(100×2)维对象;也可以通过plot(fit.tsne$Y)进行绘图。

问题:现在,我正在寻找一个函数,该函数基于训练的t-SNE模型为我的测试数据返回一个维度为(1×2)的预测pred。类似于,

# 我正在寻找的函数(但目前还不存在):
pred <- predict(object=fit.tsne, newdata=x.test)

(如何)这是可能的吗?你能帮我解决这个问题吗?


回答:

这是Rtsne包作者(Jesse Krijthe)的邮件回复:

感谢您提出如此具体的问题。我之前也收到过类似的请求,并且在GitHub上标记为一个未解决的问题(https://github.com/jkrijthe/Rtsne/issues/6)。我犹豫是否要实现这样的功能,主要原因是,从某种意义上说,t-SNE的预测没有一个“自然”的解释方式。对我来说,t-SNE是一种可视化距离矩阵的方式。因此,一个新的样本会导致一个新的距离矩阵,从而产生一个新的可视化。所以,我目前的想法是,唯一合理的方式是重新运行t-SNE程序,将训练集和测试集结合起来。

尽管如此,其他一些人认为定义预测是有意义的,例如,通过在映射中固定训练对象,并为测试对象找到合适的位置(如在该问题中所建议的)。我个人更倾向于一种方法,如参数化t-SNE,这是Laurens van der Maaten(t-SNE论文的作者)在论文中探讨过的。然而,这最好使用我的包以外的其他东西来实现,因为参数模型最有效的选择可能需要由用户来决定。

所以我的建议是1)使用所有数据重新拟合映射,或者2)看看是否能找到参数化t-SNE的实现,我知道的唯一一个是Laurens的Matlab实现。

很抱歉我不能提供更多帮助。如果您想出任何其他/更好的解决方案,请告诉我。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注