使用imbalanced-learn和Pandas DataFrame

4

我的数据集非常不平衡。两个少数类别中,每个都只包含多数类别样本的一半。我的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的输入。如果我删除它,我将无法告诉过采样数据集中的哪一行属于哪些字符串。

有没有办法保留所有列并告诉函数哪些列用于过采样?

2个回答

4
如果字符串列是您的RNN输入,则假设您计划对其进行编码(例如一位有效编码),则在过采样之前对该列进行编码,然后使用新的编码列运行过采样,而不是使用字符串列。

谢谢。问题在于,如果我用标签编码的NumPy数组替换字符串(使每个字符对应一个整数),imbalanced-learn会抱怨:“设置具有序列的数组元素”。 - wrong_path
我原则上可以将该列拆分为多个每个只包含一个数字的列...有没有更好、更快的解决方案? - wrong_path

3

对于那些需要执行类似操作的人,该库的共同作者建议我使用SMOTENC,它可以处理分类变量(如字符串)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接