我跟随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%?
答案 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
平均而言,它应该是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