首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Python中的这条random.uniform行到底是做什么的?

Python中的这条random.uniform行到底是做什么的?
EN

Stack Overflow用户
提问于 2015-12-06 09:15:28
回答 3查看 813关注 0票数 1

我正在跟踪一个关于在Python中使用随机森林的安德鲁·克罗斯的教程。我可以很好地运行代码,并且在很大程度上我理解输出。然而,我不清楚这一行到底是做什么的:

代码语言:javascript
代码运行次数:0
运行
复制
df['is_train'] = np.random.uniform(0, 1, len(df)) <= .75

我知道它“在0到1之间创建了一个(随机)均匀分布,并将3/4的数据分配到训练子集中。”然而,训练子集并不总是子集的3/4。有时更小,有时更大。那么,是否选择了一个随机大小的子集,大约为75%?为什么不让它总是75%呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-12-06 09:27:23

np.random.uniform(0, 1, len(df))创建一个len(df)随机数数组。

然后,<= .75创建另一个数组,其中包含数字匹配条件的True,以及其他地方的False

然后,代码在找到True的索引中使用数据。因为随机分布是..。嗯,随机的,你不会得到精确的75%的数值。

票数 4
EN

Stack Overflow用户

发布于 2015-12-06 09:32:05

它不将数据的3/4分配到训练子集中。

它将数据在训练子集中的概率指定为3/4

示例:

代码语言:javascript
代码运行次数:0
运行
复制
>>> 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%。

票数 4
EN

Stack Overflow用户

发布于 2015-12-06 09:38:43

如果您想更严格地随机选择一个训练集(总是接近75% ),可以使用如下代码:

代码语言:javascript
代码运行次数:0
运行
复制
d = np.random.uniform(0, 1, 1000)
p = np.percentile(d, 75)

print(np.sum(d <= p))   # 750
print(np.sum(d <= .75)) # 745

在你的例子中:

代码语言:javascript
代码运行次数:0
运行
复制
d = np.random.uniform(0, 1, len(df))
p = np.percentile(d, 75)
df['is_train'] = d <= p
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34115808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档