我正在进行多标签图像分类。这是我的数据框:
正如您所看到的,图像标记为26个特征。“1”表示存在,“0”表示不存在
我的问题是很多标签都有不平衡的数据。例如:
[1] train_df.value_counts('Eyeglasses')
Output:
Eyeglasses
0 54735
1 1265
dtype: int64
[2] train_df.value_counts('Double_Chin')
Output:
Double_Chin
0 55464
1 536
dtype: int64
如何将培训和验证数据作为一个平衡的数据进行拆分
[更新]
我试着
from imblearn.over_sampling import SMOTE
smote = SMOTE()
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3,
random_state=42)
X_train_smote, y_train_smote = smote.fit_sample(X_train, y_train)
ValueError: Imbalanced-learn currently supports binary, multiclass and binarized encoded multiclasss targets. Multilabel and multioutput targets are not supported.
您的问题混合了两个概念:将多类、多标签图像数据集拆分为具有比例表示的子集,以及处理类不平衡的重采样方法。我将只关注问题的分裂部分,因为这就是标题的内容
我将使用分层洗牌分割,以确保每个子集具有相等的重复。这是一个方便的维基百科分层抽样的可视化工具:
为此,我推荐^{} 的^{} 方法。它支持多标签数据集
我在a blog post中编写了一个更完整的解决方案,包括单元测试
skmultilearn
的一个缺点是它没有得到很好的维护,并且有一些坏的功能。我在我的博客文章中记录了一些尖锐的角落和陷阱。还要注意的是,当你得到几百万张图像时,这个分层过程非常缓慢,因为分层器只使用一个CPU相关问题 更多 >
编程相关推荐