![](/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.