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

2024-05-20 12:28:10 发布

您现在位置: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_neighbories设置为1,但我当前收到此错误ValueError: Expected n_neighbors <= n_samples, but n_samples = 1, n_neighbors = 2

在此方面的任何帮助都将不胜感激


Tags: csv数据samplehave错误分类neighborsdataset
1条回答
网友
1楼 · 发布于 2024-05-20 12:28:10

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

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

相关问题 更多 >