【问题标题】:t-SNE predictions in RR中的t-SNE预测
【发布时间】:2017-09-08 17:31:47
【问题描述】:

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

示例:假设我的目标是将 K 变量减少到 D=2 维(通常,D=2D =3 对于 t-SNE)。 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)

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

【问题讨论】:

    标签: r machine-learning dimensionality-reduction


    【解决方案1】:

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

    一旦我有了 t-SNE 图,我如何在其中嵌入传入的测试点 地图?

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

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

    【讨论】:

      【解决方案2】:

      t-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/

      在 Kaggle 上,我还看到人们这样做可能也很有趣: https://www.kaggle.com/cherzy/d/dalpozz/creditcardfraud/visualization-on-a-2d-map-with-t-sne

      【讨论】:

        【解决方案3】:

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

        感谢您提出非常具体的问题。我有一个较早的请求 这在 GitHub 上被标记为一个未解决的问题 (https://github.com/jkrijthe/Rtsne/issues/6)。我的主要原因 对实施这样的事情犹豫不决,从某种意义上说,有 不是“自然”的方式来解释预测在 tsne 方面的含义。 对我来说,tsne 是一种可视化距离矩阵的方法。因此,一个新的 样本将导致一个新的距离矩阵,因此一个新的 可视化。所以,我目前的想法是,唯一明智的方法 将是在火车和测试集上重新运行 tsne 程序 结合起来。

        话虽如此,但其他人确实认为定义是有意义的 预测,例如通过将火车对象固定在 映射并找到测试对象的好位置(如建议的那样 在问题中)。我个人更喜欢的一种方法是 类似于参数 tsne,其中 Laurens van der Maaten( tsne 论文的作者)探索了一篇论文。然而,这最好 使用我的包以外的其他东西来实现,因为 如果参数模型被选择,它可能是最有效的 用户。

        所以我的建议是 1) 使用所有数据重新调整映射或 2) 看看你能不能找到参数化 tsne 的实现,唯一的一个 我知道会是 Laurens 的 Matlab 实现。

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

        【讨论】:

          【解决方案4】:

          t-SNE 基本上不会做你想做的事。 t-SNE 仅用于在低(2 或 3)维空间中可视化数据集。你一次性给它所有你想要可视化的数据。它不是通用的降维工具。

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-04-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-08-03
            • 2019-03-21
            • 2016-04-27
            • 2020-10-09
            相关资源
            最近更新 更多