首页 > 解决方案 > 使用 np.random.rand 对训练/测试数据进行分区

问题描述

我试图理解这行代码:

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设置?

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

标签: pythonnumpy

解决方案


np.random.rand(len(df))从均匀 (0, 1) 分布中随机采样len(df)浮点数。从此分布中采样会生成 0 到 1 之间的数字。

msk是一个布尔数组。

msk[i]True如果i随机生成的 -th 值np.random.rand小于 (<) 0.8

msk[i]False如果i随机生成的 -th 值np.random.rand大于或等于 (>=) 0.8

~msk翻转TrueFalseFalseTrue。这样,cdfwhere mskis的值True被分配给数组traincdfwhere mskis的值False被分配给test

使用此设置,您预计大约 80% 的cdf分区被划分为train,其余约 20% 的分区被划分为test.


推荐阅读