我试图理解这行代码。哪个试图生成测试/训练集。
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,它是否需要该行并将其放入训练集中?如果错误进入测试集?
我想知道我的理解是否正确。谢谢。
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
的True
的值被赋予数组train
,而msk
的值被赋予test
。
通过这种设置,您可以预期大约80%的数据cdf
包含在train
中,其余约20%包含在test
中。