1

我有一个数据集,其中包含 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) 

ValueError: Expected n_neighbors <= n_samples, but n_samples = 1, n_neighbors = 2尽管我已设置 k_neighbors = 1,但我目前收到此错误

对此的任何帮助将不胜感激

4

1 回答 1

1

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

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

于 2020-08-17T14:31:28.807 回答