所以我有一个形状数据集(430,17),它由 13 个类(不平衡)和 17 个特征组成。最终目标是创建一个 NN,当我导入不平衡数据集时它会起作用,但是当我尝试在 jupyter notebook 中使用 SMOTE 对少数类进行过度采样时,这些类确实得到了平衡,但形状也会发生变化。
from imblearn.over_sampling import SMOTE
from sklearn.preprocessing import OneHotEncoder
from imblearn.pipeline import Pipelineenter
steps = [('onehot', OneHotEncoder()), ('smt', SMOTE())]
pipeline = Pipeline(steps=steps)
X_res, y_res = pipeline.fit_resample(X, y)
y_res 形状是 (754,) 从 y 形状是 (430,),所以上采样工作,也通过检查:
unique, counts = np.unique(y_res, return_counts=True)
print(np.asarray((unique, counts)).T)
班级已经平衡。但是,X_res 形状现在已从 (430, 17) 的 X 形状更改为 (754, 5553)。然后,如果我将这些数据放入我的 NN 中,它当然不起作用,因为我的输入层的 input_dim 已经改变。
我的问题是,SMOTE 过程是否不仅添加了行来平衡类,还添加了列? 我不应该得到形状为 (754, 17) 的 X_res 吗?并且因为我需要为 NN 提供这些数据,所以它们必须是数组或 numpys,而不是 pd.dataframes,这也很难理解 5553 列的来源。
我是 python 和 jupyter 的新手,所以我不知道如何解决这个问题,我非常感谢任何帮助:)