如何使用 Python 对图像数据集进行过采样?
Posted
技术标签:
【中文标题】如何使用 Python 对图像数据集进行过采样?【英文标题】:How to oversample image dataset using Python? 【发布时间】:2018-07-09 23:12:40 【问题描述】:我正在处理具有不平衡图像数据集(不同类别)的多类分类问题。我尝试了imblearn
库,但它不适用于图像数据集。
我有一个属于 3 类的图像数据集,即 A、B、C。 A 有 1000 个数据,B 有 300 个,C 有 100 个。我想对 B 类和 C 类进行过采样,这样可以避免数据不平衡。请告诉我如何使用 python 对图像数据集进行过采样。
【问题讨论】:
欢迎来到 ***。请阅读并遵循帮助文档中的发布指南。 on topic 和 how to ask 在这里申请。特别要详细说明您的尝试(“我尝试过 imblearn 库”过于笼统)以及出了什么问题(“它不工作”不是问题规范)。当我们不知道您必须完成什么、您做了什么以及出了什么问题时,我们就无法解决问题。 Minimal, complete, verifiable example 适用于此。 感谢@Prune 让我知道指南。您能否让我知道如何对图像数据进行过采样。我有一个属于 3 类的图像数据集,即 A、B、C。 A 有 1000 个数据,B 有 300 个,C 有 100 个。我想对 B 类和 C 类进行过采样。这样可以避免数据不平衡。请告诉我。再次感谢您尝试帮助我。 【参考方案1】:感谢您的澄清。通常,您不要使用 Python 进行过度采样。相反,您预处理您的数据库,复制人手不足的类。在您引用的情况下,您可能会复制 B 类中的所有内容,并将 C 类中的所有内容复制 5 份。这为您提供了 1000:600:500 的新平衡,可能更适合您的训练程序。您现在将 2100 张随机播放,而不是原来的 1400 张图片。
这能解决你的问题吗?
【讨论】:
【参考方案2】:实际上,imblearn.over_sampling
似乎只对 2d dims 输入重新采样。因此,通过此库对图像数据集进行过采样的一种方法是与它一起使用重塑,您可以:
假设您有一个size (5000, 28, 28, 3) and dtype of nd.array
的图像数据集,按照上述说明,您可以使用以下解决方案:
# X : current_dataset
# y : labels
from imblearn.over_sampling import RandomOverSampler
reshaped_X = X.reshape(X.shape[0],-1)
#oversampling
oversample = RandomOverSampler()
oversampled_X, oversampled_y = oversample.fit_resample(reshaped_X , y)
# reshaping X back to the first dims
new_X = oversampled_X.reshape(-1,28,28,3)
希望对您有所帮助!
【讨论】:
以上是关于如何使用 Python 对图像数据集进行过采样?的主要内容,如果未能解决你的问题,请参考以下文章