我有一个Python的大脚本.我在其他人的代码中激发了自己的灵感,所以我最终使用了numpy.random模块来处理某些事情(例如,用于创建从二项分布中获取的随机数组),在其他地方我使用该模块random.random.
有人可以告诉我两者之间的主要区别吗?看看这两者中的每一个的doc网页,在我看来,numpy.random只有更多的方法,但我不清楚随机数的生成是如何不同的.
我之所以要问的原因是因为我需要为调试目的播种我的主程序.但除非我在导入的所有模块中使用相同的随机数生成器,否则它不起作用,这是正确的吗?
另外,我在这里读到了另一篇文章,关于不使用的讨论numpy.random.seed(),但我真的不明白为什么这是一个坏主意.如果有人解释我为什么会这样,我真的很感激.
据我所知,random_state在各种sklearn算法中使用它来打破具有相同度量值的不同预测变量(树)之间的联系(例如在中GradientBoosting).但是文档没有澄清或详细说明.喜欢
1)这些种子用于随机数生成的其他地方?比如说RandomForestClassifier,随机数可用于查找一组随机特征来构建预测器.使用子采样的算法可以使用随机数来获得不同的子样本.可以/是同一种子(random_state)在多个随机数生成中扮演一个角色吗?
我主要关心的是
2)这个random_state变量的影响有多远.?这个值能否在预测(分类或回归)方面产生很大的不同.如果是,我应该关注哪种数据集?或者更多的是关于稳定性而不是结果的质量?
3)如果它可以产生很大的不同,如何最好地选择random_state?没有直觉,很难做GridSearch.特别是如果数据集是这样的,一个CV可能需要一个小时.
4)如果动机只是在重复运行中只有稳定的结果/评估我的模型和交叉验证分数,如果我random.seed(X)在使用任何算法之前设置(并使用random_state无),它是否具有相同的效果.
5)假设我random_state在GradientBoosted分类器上使用了一个值,并且我正在交叉验证以找到我的模型的优点(每次都在验证集上得分).一旦满意,我将在整个训练集上训练我的模型,然后将其应用于测试集.现在,完整的训练集比交叉验证中的较小训练集具有更多的实例.因此,random_state与cv循环中发生的情况相比,该值现在可以导致完全不同的行为(特征和个体预测变量的选择).类似于像样本叶子等的事情也可能导致较差的模型,因为设置是CV中的实例数,而实际的实例数更多.这是正确的理解吗?防范这种情况的方法是什么?
对于我的聚类gui,我目前正在使用随机颜色进行聚类,因为我不知道手头会有多少个聚类.
在Python中,这看起来像:
import random
def randomColor():
return (random.random(),random.random(),random.random())
Run Code Online (Sandbox Code Playgroud)
但是,当我更新东西时,颜色会发生变化.
所以我倾向于拥有一个具有输入参数I的函数,例如
def nonrandomColor(i):
...
return color
Run Code Online (Sandbox Code Playgroud)
总是会为同一个I返回相同的颜色,同时保持生成任意多种颜色的能力.
答案不一定要用Python来表达,它更像是我感兴趣的总体布局.