使用 SMOTE 对图像数据进行过采样

Sal*_*mon 5 machine-learning image-processing scikit-learn deep-learning oversampling

我正在使用 CNN 进行二元分类,并且数据不平衡,其中正医学图像:负医学图像 = 0.4:0.6。所以我想在训练前使用 SMOTE 对正医学图像数据进行过采样。但是,数据的维度是 4D (761,64,64,3) 导致错误

Found array with dim 4. Estimator expected <= 2
Run Code Online (Sandbox Code Playgroud)

所以,我重塑了我的 train_data:

X_res, y_res = smote.fit_sample(X_train.reshape(X_train.shape[0], -1), y_train.ravel())
Run Code Online (Sandbox Code Playgroud)

它工作正常。在将其提供给 CNN 之前,我通过以下方式对其进行了重塑:

X_res = X_res.reshape(X_res.shape[0], 64, 64, 3)
Run Code Online (Sandbox Code Playgroud)

现在,我不确定它是否是一种正确的过采样方法,重塑操作符会改变图像的结构吗?

Adi*_*rya 7

我有类似的问题。我使用了重塑功能来重塑图像(基本上使图像变平)

X_train.shape
(8000, 250, 250, 3)

ReX_train = X_train.reshape(8000, 250 * 250 * 3)
ReX_train.shape
(8000, 187500)

smt = SMOTE()
Xs_train, ys_train = smt.fit_sample(ReX_train, y_train)
Run Code Online (Sandbox Code Playgroud)

虽然这种方法速度慢得可怜,但有助于提高性能。