我正在跟踪一个关于在Python中使用随机森林的安德鲁·克罗斯的教程。我可以很好地运行代码,并且在很大程度上我理解输出。然而,我不清楚这一行到底是做什么的:
df['is_train'] = np.random.uniform(0, 1, len(df)) <= .75
我知道它“在0到1之间创建了一个(随机)均匀分布,并将3/4的数据分配到训练子集中。”然而,训练子集并不总是子集的3/4。有时更小,有时更大。那么,是否选择了一个随机大小的子集,大约为75%?为什么不让它总是75%呢?
发布于 2015-12-06 01:27:23
np.random.uniform(0, 1, len(df))
创建一个len(df)
随机数数组。
然后,<= .75
创建另一个数组,其中包含数字匹配条件的True
,以及其他地方的False
。
然后,代码在找到True
的索引中使用数据。因为随机分布是..。嗯,随机的,你不会得到精确的75%的数值。
发布于 2015-12-06 01:32:05
它不将数据的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%。
发布于 2015-12-06 01:38:43
如果您想更严格地随机选择一个训练集(总是接近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
https://stackoverflow.com/questions/34115808
复制