我的数据集非常不平衡。两个少数类各自包含多数类一半的样本量。我的RNN模型无法学习到最少人口类别的任何信息。
我正在尝试使用imbalanced-learn
库。例如:
sm = SMOTE(random_state=42, n_jobs=-1, k_neighbors=10)X_train, y_train = sm.fit_resample(train.drop(['label], axis=1), train['label'])
如果train.drop(['label]
仅包含所用特征的值,则上述代码有效。问题是我的DataFrame中包含一个额外的列,其值为字符串:我不能删除它,因为这些字符串是我的RNN的输入。如果我删除它,我就无法确定这些字符串在过采样数据集的哪一行中。
有没有办法保留所有列,并告诉函数使用哪些列进行过采样?
回答:
对于需要做类似事情的人,该库的共同作者建议我使用SMOTENC,它也可以处理分类变量(如字符串)。