t-SNE 维度作为附加预测变量

机器算法验证 主成分分析 随机森林 无监督学习 特纳
2022-03-31 16:04:04

这个问题也可能(也许)与 PCA 有关。我在我目前正在处理的数据集上构建了一个受监督的 RandomForest - 实际的 V 预测在许多 CV 折叠中保持在 80% 左右。R2

然后我决定通过删除 Response 变量并使用 t-SNE 从无监督的角度查看数据,并注意到我们对数据有有趣的结构。

我使用了 t-SNE 输出(3 列)并将它们添加为我的原始数据集作为另外 3 个预测变量并重建模型。该模型的性能跃升至 90%。

我正在寻找一个简单的解释来解释为什么会发生这种情况?这样做可以吗?使用这种方法实际上如何做出实时的真实世界预测?(我的意思是 t-SNE 预测变量是由整个数据集形成的,在“预测时间”我不知道)。

4个回答

当您计算数据的 tSNE 表示时,大概您使用了所有数据,因此您的 CV 保留集中的数据实际上被考虑在您的训练数据中。它内置于 tSNE 组件中。我不相信有任何方法可以预测新数据点的 tSNE 坐标,因此这种方法似乎对构建分类器没有用处。

PCA 是另一回事。可以在训练折叠上计算 PCA,然后将新数据投影到主成分上(仅来自训练数据)。只要您在应用其他方法之前不使用所有数据计算主成分,这应该没问题

不值得回答,但评论太长了。我也对这个问题感兴趣。该理论似乎非常困难,因为您将非线性算法分层在另一个算法之上。TL;DR 我很惊讶它运行得很好,我会研究你的随机森林的超参数。但是由于这个理论相当复杂,所以可能会发生一些我不明白的事情。

一是直观认识。t-SNE 尝试将数据从高维空间映射到低维空间,同时保持高维​​中“接近”的点之间的距离,但不关心不接近的点。实际上,它创建了在预测空间中彼此靠近的点的集群,并将它们映射到两个(或三个)维度。这与分类方案一起可以提供合理的准确性。考虑从 t-SNEs 应用到 MNIST 数据集的原始论文中的示例——在二维中,您可以轻松地以大约 90% 的准确率通过眼睛挑选出数字,在顶部分层的 k-means 分类器可以做到这一点或更好.

一个明确指定的随机森林应该在高维空间中挑选出该结构,而无需先将其映射下来。由于您没有添加任何信息,并且您接受了 t-SNE 中的一些损失,因此您(在某种意义上)只是将您的数据放在 3 维流形上,并将这个有损的新数据集附加到您现有的集合中。由于随机森林已经有了一种规范化的方法,因此尚不清楚为什么您的结果会有所改善。这让我怀疑你的超参数设置得有多好,也就是说,你的随机森林可能没有很好地规范化,所以你让 t-SNE 为你做这件事,你的准确性得到了提高。首先正确设置超参数并删除 t-SNE 应该会进一步提高这种性能。

不要使用 -SNE 作为预测变量(通常)。t

正如之前的答案中所指出的那样,在最佳情况下使用所有数据来计算 -SNE 表示是一种不好的做法,即使一个人保留了响应变量。此外,直接使用 -SNE 还会使原始建模过程在出现新数据时变得无用(正如 OP 也正确评论的那样),因为我们无法重建新的嵌入。tt

作为一种解决方法,我认为值得探索深度自动编码器的选项。这将允许用户轻松地将新数据映射到我们的“有趣表示”上。深度自动编码器可以学习数据集的高度非线性表示。我们将在我们的训练折叠上训练自动编码器(类似于我们对 PCA 所做的),然后相应地投影新数据。amoeba 关于“在 Tensorflow 中构建自动编码器以超越 PCA ”的回答是帮助您入门的绝佳资源。

在特定情况下,人们可能能够构建一个深度神经网络来在一个新样本上此选项将解决上述问题(数据重用,不对未见数据进行泛化)。我不认为这与首先使用深度自动编码器有很大不同,但从概念上讲,我发现它更加复杂。此外,自动编码器文献有许多可能派上用场的扩展(例如去噪自动编码器)。t

关于报告的 10%+ 性能提升的确切现象:假设没有意外使用响应变量,我怀疑数据可能具有 RF 分类器无法轻松检测到的非线性嵌入。随机森林(或任何其他模型)不保证会发现任何非线性关联。我建议检查 -SNE 输出本身。也许其中一些模式并不难解释,你的一些聪明/受过教育的特征工程可以给你一个不错的提升。t

我希望你看到,有点反气候,直接使用 -SNE 输出不是很直接。 -SNE 是一个非常有用的工具;然而,与许多伟大的工具一样,当我们只有螺丝时,我们很容易将它误用作锤子。tt

我还会假设,就像 G5W 一样,您在生成坐标时使用了所有数据。鉴于此,我知道可能有两种机制可以在前进的基础上使用 t-SNE 作为预测器:

  • 对于所有新的“实时”数据,在整个数据集上运行 t-SNE 后重建模型。顺序类似于:1)获取新数据并将其与您的历史数据放在一起。2) 对所有数据(新旧数据)运行 t-SNE。3) 正确定位您的训练/测试/实时数据集,并使用 3 维(或 N 维)t-SNE 空间中的新坐标重建模型。4) 对最近生成的新“实时”数据坐标的评分模型。这种方法对批量评分有效,但可能会带来巨大的时间成本。您可能还会发现预测稳定性存在问题,因为之前的分数“浮动”,并且坐标/模型被重新计算。

  • 或者,使用您的训练数据的 t-SNE 解释,为您的各个坐标分量构建单独的模型。Laurens van der Maaten 在他的 t-SNE 常见问题解答底部提到了这一点。[ https://lvdmaaten.github.io/tsne/]然后,使用组件模型来估计新“实时”数据的坐标。然而,这将通过交叉值和调整单个 x、y、z 模型组件来最小化新的误差源。