如何在执行 SMOTE,python 之前删除少于一定数量示例的少数 类

How to remove minority classes with less than a certain number of examples before performing SMOTE, python

我有一个数据集,其中包含 100 列作为从 word2vec 生成的特征向量(100D 特征向量),我的目标是我数据集中每一行向量的分类变量。现在我的数据集总共有大约 1000 个不同的分类变量,行数约为 75000。数据集的问题是它高度不平衡,除了前 200 个分类变量外,其余 类几个样本和 some classes have less than 6 samples.

现在我想使用 SMOTE 对这些数据执行过采样,以便为少数 类 生成更多示例。 I want to ignore the classes that have less than 6 sample examples 因为那是 SMOTE 给出值错误的地方。有什么办法,我可以在代码中处理它,这样我就可以在执行 SMOTE 时忽略那些少于 6 个样本的 类 吗?这样做是否有助于解决我目前面临的错误?

参考代码和错误信息:

dataset = pd.read_csv(r'C:\vectors.csv')
X = dataset.iloc[:, 3:103]
y = dataset.iloc[:, 0]
from imblearn.over_sampling import SMOTE
smote = SMOTE(k_neighbors = 1)       
smote_Xtrain, smote_y_train = smote.fit_sample(X, y) 

虽然我设置了 k_neighbors = 1

,但我目前 ValueError: Expected n_neighbors <= n_samples, but n_samples = 1, n_neighbors = 2 收到此错误

如有任何帮助,我们将不胜感激

您可以看到每个 class 的唯一条目,并使用以下命令对它们进行计数:df['VARIABLE'].value_counts(dropna=False)(如果您不想显示 NaN,请转动 dropna=True)。

然后,您可以自己创建一个算法,设置一个阈值,并自动删除 class 出现低于您的阈值的元素,或者将它们放入一个新的大 class“其他”例如