首页 文章

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

提问于
浏览
1

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

random_state:int或RandomState实例或None(默认)伪随机数生成器种子控制 . 如果为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 回答

  • 2

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

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

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

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

  • 2

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

    记录如下:

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

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

    通过从各向同性高斯中随机采样 Map 点来初始化梯度下降,其中以方差为中心的小方差 .

    “随机”一词的其他位置也表明存在随机性选择起始界标点,因此可以影响函数的局部最小值 .

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

    Explanation :某些算法在某些参数的初始化中使用随机数,例如用于优化的权重,随机分成数据并进行测试,选择某些特征等 .

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

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

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

相关问题