![](/img/trans.png)
[英]In python, what is the difference between random.uniform() and random.random()?
[英]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
平均应为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.