繁体   English   中英

图像分类的加权训练、测试、验证拆分

[英]Weighted train, test, validation split for image classification

数据框图像 我正在尝试将上述 dataframe 拆分为训练(80%)、验证(10%)和测试(10%); 但是,我想在每组中保持几乎相同数量的疾病。 Finding_Labels 列包含图像链接到的疾病列表。

如第一行所示,每张图像都可能与一种以上的疾病相关联——这有点问题。 因此,如何以 3 组疾病数量几乎相等的方式拆分它?

PyTorch 中的答案将不胜感激。

疾病名称及计数:

{'Atelectasis': 391,
         'Infiltration': 1181,
         'No Finding': 3479,
         'Emphysema': 116,
         'Pneumonia': 116,
         'Pleural_Thickening': 130,
         'Pneumothorax': 361,
         'Mass': 241,
         'Nodule': 190,
         'Consolidation': 299,
         'Edema': 124,
         'Cardiomegaly': 157,
         'Effusion': 506,
         'Fibrosis': 25,
         'Hernia': 1}

正如评论中提到的,我会使用sklearn来解决您的问题。

例如,假设您有以下特征和 label 数据集,其中一个属性的数量(y==1).sum()等于零属性的数量(y==0).sum() (所以你一对零的比率为1.0 ):

from sklearn import datasets

X, y = datasets.make_blobs(n_samples=10000, centers=2, random_state=0)

print(np.bincount(y)[0]/np.bincount(y)[1]) # 1.0

然后,您可以将数据拆分为训练、验证和测试数据,同时保持相同的属性比率,如下所示:

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=42, test_size=0.2)
X_val, X_test, y_val, y_test = train_test_split(X_test, y_test, stratify=y_test, random_state=42, test_size=0.5)

print(np.bincount(y_train)[0]/np.bincount(y_train)[1]) # 1.0
print(np.bincount(y_test)[0]/np.bincount(y_test)[1])   # 1.0
print(np.bincount(y_val)[0]/np.bincount(y_val)[1])     # 1.0
print(len(y_train), len(y_val), len(y_test))           # 8000, 1000, 1000

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM