我如何随机抽样所有类别的数据?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我如何随机抽样所有类别的数据?相关的知识,希望对你有一定的参考价值。

我有一些数据和相应的标签,如下所示:

data = [img1, img2, img3, ...]    # each category has 1000 samples, total data is 10000
labels = [1, 1, 2, 2, 3, 3, 4, 4, ...]    # total num of labels is 10

我想创建一个子类别有1000个样本的新子数据集,其他类别分别有100个样本。因此,子数据集中的总数据量将为1900。(1000对900)

((我打算为子分类创建子数据集)

因此,我需要随机抽取所有数量相同的类别的数据。

我认为它与分层抽样相似,因此我尝试在scikit-learn中找到方法,但我不能。

我该怎么做?

答案

我也找不到函数,所以我做了一个。

让我们创建一个假数据集:

import numpy as np

x = np.random.choice(np.arange(10), 10_000)

现在,让我们找到索引,如果从x中提取,它们将返回分层的样本。

d = dict()

for val in np.unique(x):
    d[str(val)] = np.where(x == val)
    d[str(val)] = np.random.choice(d[str(val)][0], 100, replace=False)

ix = np.concatenate([values for values in d.values()])

让我们测试一下:

print(np.unique(x[ix], return_counts=True))
Out[64]: 
(array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]),
 array([100, 100, 100, 100, 100, 100, 100, 100, 100, 100], dtype=int64))

您也可以将ixy或任何其他数组一起使用。

以上是关于我如何随机抽样所有类别的数据?的主要内容,如果未能解决你的问题,请参考以下文章

随机抽样的 SQL 分区

机器学习:R语言实现随机森林

在PostgreSQL中,如何根据分类列中每个级别的比例从表中随机抽样?

如何解决样本不均衡问题

随机森林算法梳理

用于 WordPress 的 PHP 片段,用于获取所有产品子类别