根据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 回答
它被用在PCA上(用于减少数据维度)并初始化训练数据的嵌入 .
您可以自己检查代码https://github.com/scikit-learn/scikit-learn/blob/14031f6/sklearn/manifold/t_sne.py#L777
您还可以尝试阅读有关该方法的更多信息 .
编辑1:它可能(或不)直接影响结果 . 我建议你设置一个随机种子,并始终使用它 .
在我评论的帖子中,很好地解释了random_state的使用 . 对于TSNE的这种特定情况,random_state用于为算法的cost_function设定种子 .
记录如下:
另外,在您引用的论文中搜索“随机”一词 . 第一行是
“随机”一词的其他位置也表明存在随机性选择起始界标点,因此可以影响函数的局部最小值 .
该随机性由伪随机数生成器表示,其由
random_state
参数播种 .Explanation :某些算法在某些参数的初始化中使用随机数,例如用于优化的权重,随机分成数据并进行测试,选择某些特征等 .
现在,在编程和软件方面,没有什么本质上是真正随机的 . 为了生成随机数,使用程序 . 但由于它的程序有一些固定的步骤,因此它不能真正随机 . 所以它叫伪随机生成器 . 现在每次输出不同的数字序列,它们根据生成的数字进行输入 . 通常,此输入是当前时间(以毫秒为单位)(Epochs UTC) . 此输入称为种子 . 修复种子意味着修复输出数字 .
random_state
用作scikit中伪随机数生成器的种子 - 学习在算法中涉及此类随机性时复制行为 . 当一个固定的random_state,它将在程序的不同运行中产生完全相同的结果 . 因此,如果有的话,它更容易调试和识别问题 . 如果不设置random_state
,每次运行算法时都会使用不同的种子,您将获得不同的结果 . 可能会发生这样的情况:您可能会在第一时间获得非常高的分数,而且永远无法再实现这一目标 .现在在机器学习中,我们希望复制与之前执行的步骤完全相同的步骤,以分析结果 . 因此
random_state
固定为某个整数 . 希望能帮助到你 .