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)
R语言使用Rtsne包进行TSNE分析:提取TSNE分析结果合并到原dataframe中可视化tsne降维的结果并使用两个分类变量从颜色形状两个角度来可视化tsne降维的效果
R语言使用Rtsne包进行TSNE分析:提取TSNE分析结果合并到原dataframe中可视化tsne降维的结果并使用两个分类变量从颜色形状两个角度来可视化tsne降维的效果
R语言使用Rtsne包进行TSNE分析:提取TSNE分析结果合并到原dataframe中可视化tsne降维的结果并圈定降维后不匹配的数据簇(tSNE identifying mismatch)