scikit-learn TSNE 中的 random_state 参数是啥?

Posted

技术标签:

【中文标题】scikit-learn TSNE 中的 random_state 参数是啥?【英文标题】:What is random_state parameter in scikit-learn TSNE?scikit-learn TSNE 中的 random_state 参数是什么? 【发布时间】:2017-09-05 09:25:17 【问题描述】:

根据http://scikit-learn.org/stable/modules/generated/sklearn.manifold.TSNE.htmlrandom_state是

random_state : int 或 RandomState 实例或无(默认)伪 随机数生成器种子控制。如果没有,使用 numpy.random 单身人士。请注意,不同的初始化可能会导致 成本函数的不同局部最小值。

正在播种什么状态?这对 tsne 实施有何影响? tsne论文中没有提到这个参数:http://jmlr.csail.mit.edu/papers/volume9/vandermaaten08a/vandermaaten08a.pdf

更新 1:

虽然Classification results depend on random_state? 肯定有助于解释为什么在 sklearn 中使用随机状态,但它并没有说明如何在 sklearn tsne 算法实现中使用随机状态。

【问题讨论】:

Classification results depend on random_state? 的可能重复项。查看问题和答案中链接的其他帖子 @VivekKumar 请查看问题更新。 【参考方案1】:

我评论的帖子中很好地解释了 random_state 的使用。 对于 TSNE 的这种特殊情况,使用 random_state 来播种算法的 cost_function。

据记载:

方法:字符串(默认:'barnes_hut')

默认情况下,梯度计算算法使用 Barnes-Hut 在 O(NlogN) 时间内运行的近似值

另外,在您引用的论文中搜索“随机”一词。第一行是

梯度下降是通过随机采样地图点来初始化的 来自一个以小方差为中心的各向同性高斯 起源。

“random”一词的其他位置也阐明了选择起始地标点存在随机性,因此会影响函数的局部最小值。

这种随机性由一个伪随机数生成器表示,该生成器由random_state 参数播种。

说明: 一些算法在初始化某些参数时使用随机数,例如优化权重、将数据随机拆分为训练和测试、选择一些特征等。

现在在一般的编程和软件中,没有什么本质上是真正随机的。为了生成随机数,使用了一个程序。但由于它是一个有一些固定步骤的程序,它不可能是真正随机的。所以它被称为伪随机生成器。现在要每次输出不同的数字序列,它们会根据生成的数字进行输入。通常,此输入是以毫秒为单位的当前时间 (Epochs UTC)。此输入称为种子。固定种子意味着固定输出数量。

random_state 用作 scikit-learn 中伪随机数生成器的种子,以复制算法中涉及这种随机性时的行为。当一个固定的 random_state 时,它​​会在程序的不同运行中产生完全相同的结果。因此,如果有问题,它更容易调试和识别问题。 如果不设置random_state,每次运行该算法时将使用不同的种子,您将获得不同的结果。您可能会第一次获得非常高的分数,并且永远无法再次获得该分数。

现在在机器学习中,我们希望复制与之前完全相同的步骤来分析结果。因此random_state 固定为某个整数。希望对您有所帮助。

【讨论】:

【参考方案2】:

它被用在 PCA 上(以减少数据维度)并初始化训练数据的嵌入。

您可以自行查看代码https://github.com/scikit-learn/scikit-learn/blob/14031f6/sklearn/manifold/t_sne.py#L777

您也可以尝试阅读有关该方法的更多信息。

Edit1:它可能(或不)直接影响结果。我建议您设置一个随机种子并始终使用它。

【讨论】:

以上是关于scikit-learn TSNE 中的 random_state 参数是啥?的主要内容,如果未能解决你的问题,请参考以下文章

未能直接从Github在Google Colab中安装Sk-learn(scikit-learn)

[PYTHON-TSNE]可视化Word Vector

R语言使用Rtsne包进行TSNE分析:提取TSNE分析结果合并到原dataframe中可视化tsne降维的结果并使用两个分类变量从颜色形状两个角度来可视化tsne降维的效果

R语言使用Rtsne包进行TSNE分析:提取TSNE分析结果合并到原dataframe中可视化tsne降维的结果并使用两个分类变量从颜色形状两个角度来可视化tsne降维的效果

R语言使用Rtsne包进行TSNE分析:提取TSNE分析结果合并到原dataframe中可视化tsne降维的结果并圈定降维后不匹配的数据簇(tSNE identifying mismatch)

python实现TSNE检验 TSNE降维代码