我正在尝试理解这一行代码。哪个正在尝试生成测试/训练集。
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,则将该行放入火车集中?如果测试集为假?
我想知道我的理解是否正确。谢谢。
答案 0 :(得分:2)
numpy.random.rand(len(df))
从均匀(0,1)分布而不是从正态分布中随机生成len(df)
个数字!
除此之外,您几乎已经掌握了它。
msk
是一个布尔数组,如果msk[i]
随机生成的第i个值小于True
,则np.random.rand
为0.8
。如果msk[i]
生成的第i个值大于或等于False
,则np.random.rand
为0.8
。
如果您仍在努力理解这一点,建议您首先创建您的随机数rands = np.random.rand(len(df))
并对其进行查看,然后创建掩码msk = rands < 0.8
。比较rands
和msk
,您应该可以清楚地看到它们之间的关系。
~msk
将True
翻转到False
,反之亦然,所以是的,分配了cdf
为msk
的{{1}}的值到数组True
中,并将train
为False的值分配给msk
。
通过这种设置,您期望test
中包含约80%的数据cdf
,而train
中包含约20%的数据。 / p>