【问题标题】: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 算法实现中使用随机状态。

【问题讨论】:

标签: scikit-learn


【解决方案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:它可能(或不)直接影响结果。我建议您设置一个随机种子并始终使用它。

    【讨论】:

      猜你喜欢
      • 2021-07-15
      • 2016-02-17
      • 2015-05-22
      • 2015-02-14
      • 2020-12-14
      • 2012-06-29
      • 2017-02-25
      • 2017-01-02
      • 2016-02-23
      相关资源
      最近更新 更多