我正在处理具有不平衡图像数据集(不同类别)的多类分类问题。我尝试imblearn
了库,但它不适用于图像数据集。
我有一个属于 3 类的图像数据集,即 A、B、C。A 有 1000 个数据,B 有 300 个,C 有 100 个。我想对 B 类和 C 类进行过采样,这样可以避免数据不平衡。请让我知道如何使用 python 对图像数据集进行过采样。
我正在处理具有不平衡图像数据集(不同类别)的多类分类问题。我尝试imblearn
了库,但它不适用于图像数据集。
我有一个属于 3 类的图像数据集,即 A、B、C。A 有 1000 个数据,B 有 300 个,C 有 100 个。我想对 B 类和 C 类进行过采样,这样可以避免数据不平衡。请让我知道如何使用 python 对图像数据集进行过采样。
感谢您的澄清。通常,您不会使用 Python 进行过度采样。相反,您预处理您的数据库,复制人手不足的类。在您引用的情况下,您可能会复制 B 类中的所有内容,并将 C 类中的所有内容复制 5 份。这为您提供了 1000:600:500 的新平衡,可能更适合您的训练程序。您现在对 2100 个图像进行随机播放,而不是原来的 1400 张图像。
这能解决你的问题吗?
实际上,似乎 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)
希望这有帮助!