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

时间:2018-12-07 09:35:49

标签: image-processing machine-learning scikit-learn deep-learning oversampling

我正在使用CNN进行二进制分类,并且当阳性医学图像:阴性医学图像= 0.4:0.6时,数据不平衡。因此,我想在训练之前使用SMOTE对正医学图像数据进行过采样。 但是,数据的尺寸为4D(761,64,64,3),这会导致错误

Found array with dim 4. Estimator expected <= 2

所以,我重塑了我的train_data:

X_res, y_res = smote.fit_sample(X_train.reshape(X_train.shape[0], -1), y_train.ravel())

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

X_res = X_res.reshape(X_res.shape[0], 64, 64, 3)

现在,我不确定这是否是过采样的正确方法,整形算子会改变图像的构造器吗?

2 个答案:

答案 0 :(得分:1)

我有一个类似的问题。我曾经使用过重塑功能来重塑图像(基本上将图像展平)

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)

尽管这种方法虽然速度缓慢,但有助于提高性能。

答案 1 :(得分:0)

  1. 一旦平整图像,就会失去本地化信息,这就是在基于图像的机器学习中使用卷积的原因之一。
  2. 8000x250x250x3具有固有的含义-进行8000x250 * 250 * 3重塑时,8000个图像样本,每个宽度为250,高度为250的图像都具有3个通道,除非您使用某种形状,否则整形只是一堆数字序列网络来教它的缺点。
  3. 过采样对图像数据不利,您可以进行图像增强(20crop,引入高斯模糊,旋转,平移等噪声)。