什么是scikit-learn TSNE中的random_state参数?

时间:2017-04-10 10:58:34

标签: scikit-learn

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

  

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

播种什么州?这对tsne的实现有何影响? tsne paper中未提及此参数:http://jmlr.csail.mit.edu/papers/volume9/vandermaaten08a/vandermaaten08a.pdf

更新1:

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

2 个答案:

答案 0 :(得分:3)

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

记录在案:

  

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

     

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

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

  

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

“随机”一词的其他位置也说明随机性是选择起始地标点,因此可以影响功能的局部最小值。

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

<强>解释: 有些算法在某些参数的初始化中使用随机数,例如用于优化的权重,随机分组到测试中的数据,选择某些特征等。

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

random_state用作scikit中伪随机数生成器的种子 - 学习在算法中涉及此类随机性时复制行为。当一个固定的random_state,它将在程序的不同运行中产生完全相同的结果。因此,如果有的话,它更容易调试和识别问题。 如果不设置random_state,每次运行算法时都会使用不同的种子,您将获得不同的结果。可能会发生这样的情况:您可能会在第一时间获得非常高的分数,而且永远无法再实现这一目标。

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

答案 1 :(得分:2)

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

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

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

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