簡體   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