Python中的random.uniform行究竟是做什么的?

时间:2015-12-06 09:15:29

标签: python random random-forest

我跟随tutorial here from Andrew Cross关注在Python中使用随机森林。我得到了运行良好的代码,并且在大多数情况下我理解输出。但是,我不确定这条线到底是做什么的:

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

我知道它会在0和1之间创建(随机)均匀分布,并将3/4的数据分配到训练子集中。&#34;但是,训练子集并不总是正好是子集的3/4。有时它更小,有时更大。那么选择的随机大小子集大约是75%吗?为什么不让它总是75%?

3 个答案:

答案 0 :(得分:4)

它不会将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% - 在第3名。

平均而言,它应该是75%。

答案 1 :(得分:3)

np.random.uniform(0, 1, len(df))创建一个len(df)个随机数组 <= .75然后创建另一个包含True的数组,其中数字与该条件匹配,而False则在其他地方。 然后,代码使用找到True的索引中的数据。由于随机分布是......好的,随机的,你不会得到75%的值。

答案 2 :(得分:0)

如果你想更严格地随机选择训练集总是非常接近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