繁体   English   中英

Python中的random.uniform行到底是做什么的?

[英]What exactly does this random.uniform line in Python do?

我正在关注Andrew Cross此处使用Python中的随机森林的教程 我得到的代码可以很好地运行,并且在大多数情况下我了解输出。 但是,我不确定这行到底是做什么的:

df['is_train'] = np.random.uniform(0, 1, len(df)) <= .75

我知道它“在0和1之间创建(随机)均匀分布,并将3/4的数据分配在训练子集中。” 但是,训练子集并不总是恰好是子集的3/4。 有时它较小,有时它较大。 那么,是否选择了大约75%的随机大小子集? 为什么不让它始终达到75%?

它不会将3/4的数据分配给训练子集中。
它将数据在训练子集中的概率分配为3/4

例:

>>> import numpy as np
>>> sum(np.random.uniform(0, 1, 10) < .75)
8
>>> sum(np.random.uniform(0, 1, 10) < .75)
10
>>> sum(np.random.uniform(0, 1, 10) < .75)
7
  • 在第一个示例中,数据的80%位于训练子集中
  • 100%-在第二个
  • 70%-第三名

平均应为75%。

np.random.uniform(0, 1, len(df))创建一个len(df)随机数数组。
<= .75然后创建另一个数组,该数组包含与条件匹配的True和在其他位置为False数组。
然后,代码使用找到True索引中的数据。 由于随机分布是...很好,是随机的,您将无法获得准确的75%的值。

如果您想更严格地选择总是非常接近75%的训练集,则可以使用如下代码:

d = np.random.uniform(0, 1, 1000)
p = np.percentile(d, 75)

print(np.sum(d <= p))   # 750
print(np.sum(d <= .75)) # 745

在您的示例中:

d = np.random.uniform(0, 1, len(df))
p = np.percentile(d, 75)
df['is_train'] = d <= p

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM