给定一个 t-SNE 图,我如何推断“最正确”的标签?如何理解它的结构?

数据挖掘 聚类 标签 特纳
2021-09-20 13:37:43

假设我从一个非常大的数据框开始(例如从 tsv 文件导入/修改)。其中一些列是分类标签。

(作为一个更具体的例子,让我们想象一个学区的一群学生,从学前班到高中)。

现在,我开始使用 sklearn 并实例化一个 t-SNE 模型,类似于此处的示例:

http://scikit-learn.org/stable/modules/generated/sklearn.manifold.TSNE.html

 import numpy as np
 from sklearn.manifold import TSNE
 X  # my data
 model = TSNE(n_components=2, random_state=0)
 np.set_printoptions(suppress=True)
 model.fit_transform(X) 

然后我们绘制这个。情节可能看起来像这样:http: //imgur.com/a/3amkJ

这是我的问题:对于真实的数据集,在使用 t-sne 进行学习/聚类后,您将拥有许多“聚类”。然后,使用分类标签,我尝试遍历每一个,并尝试找出 t-SNE 图给我的结构。

对于我们学校的例子,我会得到 t-SNE 输出,然后我会标记数据点。(假设集群实际上代表年龄/班级,例如一年级学生分组,二年级学生是一个组等)

如果我尝试用“成绩”为这个情节着色,我会发现成绩并不能真正解释这个情节的结构。(为什么?因为每个班级都有学生的成绩为 As、Bs、Cs 等)然后我可能会尝试身高……那效果很好(因为矮个子学生之间存在相关性-> 学前班、高个子学生- -> 高中生)。

如何使用 t-SNE 图来推断数据的“最正确”标签?如何使用 t-SNE 图来解释(并进一步探索)图结构?

1个回答

使用 t-SNE,没有一个输入参数的权重超过任何其他参数,因此您希望看到的学生按年级形成孤岛的差异不会发生,因为存在太多其他数据可以将这些学生/数据点拉到不同的方向。

我强烈建议您记住一个特定的问题并定制您的输入类别,以便您的问题可以通过 t-sne 映射来回答。

您可以尝试询问特定问题并更改您要求 t-SNE 查看的输入类别。例如,更高的学生会获得更好的成绩吗?输入身高和年级类别,同时忽略年级和年龄。这是一个愚蠢的例子,但我希望它能让您了解如何使用 t-sne 来帮助您了解数据。

您可能还会发现有些类别掩盖了有意义的发现。高度对于提取有意义的信息可能不是很有用,并且由于高度范围将比 AF 等级范围大得多,它可能会更多地影响 t-sne 图。

查看您在每个类别的色标上描述的数据是开始每次新的 t-sne 运行的好地方。

可以使用不同的参数运行多个 t-snes。为了确保您得到有意义的答案,我建议您也使用相同的参数多次运行 t-sne。

如果你有足够多的学生,最好在你的训练集中包含一半你探索并弄清楚要问什么问题,然后当你认为你找到了有意义的东西时,将这些条件应用于测试集中的其他学生看看它是否成立。