【问题标题】:How can I sample the data for all each category ramdomly?如何随机抽样所有每个类别的数据?
【发布时间】:2020-04-01 19:02:12
【问题描述】:

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

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 vs 900)

(我的目的是为二进制分类制作子数据集)

所以我需要为所有每个类别随机抽取相同数量的数据。

我认为它与分层抽样类似,所以我试图在 scikit-learn 中找到方法,但我找不到。

我该怎么做?

【问题讨论】:

    标签: python numpy


    【解决方案1】:

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

    让我们制作一个虚假数据集:

    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))
    

    您也可以使用ix 987654327 @,或任何其他数组。

    【讨论】:

    • 感谢您的答案! span>
    猜你喜欢
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 2018-09-12
    • 2022-11-28
    相关资源
    最近更新 更多