有人可以验证我对numpy.random.rand中的这段代码的理解吗?

时间:2019-02-21 16:21:04

标签: python numpy

我正在尝试理解这一行代码。哪个正在尝试生成测试/训练集。

msk = np.random.rand(len(df)) < 0.8

据我了解,numpy.random.rand(len(df))返回的数字数组介于[0,1)均匀分布和满足<0.8的数之间。

每个数字在数组中代表什么?例如:0.001。 0.888,它们是数据的百分位数吗?所以0.001 =>此数据比数据集的0.001低吗?

这样做之后,我们得到布尔对象数组,然后创建训练集,测试集。 cdf是一个更简单的数据框。

train = cdf[msk]
test = cdf[~msk]

在此代码中,对于cdf中的每一列,它是否与数组msk中的每个布尔对象匹配,如果它为True,则将该行放入火车集中?如果测试集为假?

我想知道我的理解是否正确。谢谢。

1 个答案:

答案 0 :(得分:2)

numpy.random.rand(len(df))从均匀(0,1)分布而不是从正态分布中随机生成len(df)个数字!

除此之外,您几乎已经掌握了它。

msk是一个布尔数组,如果msk[i]随机生成的第i个值小于True,则np.random.rand0.8。如果msk[i]生成的第i个值大于或等于False,则np.random.rand0.8

如果您仍在努力理解这一点,建议您首先创建您的随机数rands = np.random.rand(len(df))并对其进行查看,然后创建掩码msk = rands < 0.8。比较randsmsk,您应该可以清楚地看到它们之间的关系。

~mskTrue翻转到False,反之亦然,所以是的,分配了cdfmsk的{​​{1}}的值到数组True中,并将train为False的值分配给msk

通过这种设置,您期望test中包含约80%的数据cdf,而train中包含约20%的数据。 / p>