我有一些数据和相应的标签标签,如下所示:
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))
您还可以将其ix
与y
或任何其他数组一起使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句