我有一个高度不平衡的数据集:
from collections import Counter
unique1, counts1 = np.unique(labels_ds , return_counts=True)
dict(zip(unique1, counts1))
print('Original dataset shape {}' .format(counts1))
#returns
#Original dataset shape [ 353 88 6656 1 1757 52 5480 226 452 125 5992 559 497 6134 29747]
在这种情况下,我不能只是简单地使用RandomOverSampler
它返回n=29747*1 samples
,也不能SMOTE
因为它至少需要 k_neighbors=1
因此,我想复制少数类的样本然后应用SMOTE
。注意:我的特征和标签位于单独的数组中,它们分别具有形状# (27, 28, 500, 500, 15)
和形状# (27, 500, 500, 1)
。
idx = np.where(labels == 6)
print(idx)
# returns (array([23]), array([459]), array([429]), array([0]))
所以我的问题是,我怎样才能复制(x6)少数类的特征和标签(可能基于少数类标签的索引)?
编辑 我的整个图像被网格化为 9x3 ==>27“单元格”每个单元格有 28 个图像(卫星图像,28 个相对于时间),500x500 是高度和宽度,15 是特征数,1 因为这是一个基于像素的分类,因此我有“可以这么说的标签图像”