numpy 使用np.random.rand划分训练/测试数据

d8tt03nd  于 2023-10-19  发布在  其他
关注(0)|答案(2)|浏览(108)

我试着理解这行代码:

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

根据我的理解,numpy.random.rand(len(df))返回一个[0,1)之间的数字数组,由均匀分布生成。
数组中的每个数字代表什么?数据的值是否相同?
在此之后,我们得到布尔对象数组,然后创建训练集和测试集。

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

在这段代码中,对于cdf中的每一列,它是否匹配数组msk布尔对象,如果它是True,它将该行放入train中?如果False被设置为test呢?
我想知道我的理解是否正确

toiithl6

toiithl61#

np.random.rand(len(df))从均匀(0,1)分布中随机采样len(df)浮点数。从该分布中采样生成0到1之间的数字。
msk是一个布尔数组。
如果np.random.rand随机生成的第i个值小于(<)0.8,则msk[i]True
如果np.random.rand随机生成的第i个值大于或等于(>=)0.8,则msk[i]False
~mskTrue翻转为False,将False翻转为True。这样,cdf的值(其中mskTrue)被分配给数组traincdf的值(其中mskFalse)被分配给test
通过这种设置,您可以预期大约80%的cdf被分区到train中,剩余的约20%被分区到test中。

pgpifvop

pgpifvop2#

np.random.rand(len(df)) =>总之,上面的代码行只是一个选择标准生成器,其中df的长度用于生成0和1之间的随机值。
msk = np.random.rand(len(df)) < 0.8 => msk返回一个布尔数组,其中小于0.8的随机值为true,反之亦然。
train = cdf[msk] =>这将返回cdf Dataframe 索引,其中msk值为True,
test = cdf[~msk] =>这将返回cdf Dataframe 索引,其中msk值为False,因此将 Dataframe cdf分为训练数据(80%)和测试数据(20%)
enter image description here

相关问题