我使用以下代码来使用Pandas random_state
randomState = 123
sampleSize = 750
df = pd.read_csv(filePath, delim_whitespace=True)
df_s = df.sample(n=sampleSize, random_state=randomState)
这会生成一个示例数据帧df_s
。每次我使用相同的randomState
运行代码时,我都会得到相同的样本df_s
。当我将值从123
更改为12
时,样本也会发生变化,因此我想这就是random_state
的作用。
我的愚蠢问题:数字变化如何影响样本变化? 我阅读了Pandas documentation和Numpy documentation,但无法获得清晰的图片。
非常感谢任何有关示例的直接解释。
答案 0 :(得分:2)
如pandas.DataFrame.sample
的文档中所述,random_state
参数接受整数(如您的情况)或numpy.random.RandomState
,它是Mersenne Twister伪随机的容器数字生成器。
如果将整数传递给它,它将使用它作为伪随机数生成器的seed。顾名思义,生成器不会产生真正的随机性。它有一个内部状态(你可以通过调用np.random.get_state()
获得),它是基于种子初始化的。当由相同的种子初始化时,它将重现相同的序列"随机数"。
如果你传递一个RandomState,它将使用这个(已经初始化/播种)RandomState来生成伪随机数。这也允许您通过在初始化RandomState时设置固定种子然后传递此RandomState来获得可重现的结果。实际上你应该更喜欢这个,而不是设置numpys内部RandomState的种子。罗伯特克恩在answer中解释了这个推理及其评论。我们的想法是拥有一个独立的流,通过改变numpys内部RandomState的种子来防止程序的其他部分弄乱你的可重复性。