首页 > 解决方案 > 用于具有阈值的多输出图像分类的拆分数据集

问题描述

我使用 sklearn.model_selection 中的 StratifiedShuffleSplit 来拆分数据集。但这仅适用于 1 个标签。那么如何对两个标签进行分层拆分,并为每个标签中的每个类中的样本数添加一个阈值呢?对不起,我的英语不好。

from sklearn.model_selection import StratifiedShuffleSplit
split = StratifiedShuffleSplit(n_splits=1, test_size=val_size, random_state=42)
for train_index, val_index in split.split(tdf, tdf['layout']):
    train_df = tdf.loc[train_index]
    val_df = tdf.loc[val_index]

标签: pythonscikit-learnsplit

解决方案


您能否详细说明(在每个班级的每个标签中)?

此 API 可用于确保训练集和测试集在每个类中具有示例比例。换句话说,我们用它来确保我们在训练和测试集中都有来自每个类的样本。它不处理不平衡类的问题,这是另一个问题。

如果您的意思是 1 个类乘 1 个标签,那么您需要在拆分前检查类数

tdf['layout'].nunique()

输出应该是:2

此外,在您的代码中,您只拆分独立功能(输入)而不拆分输出/目标(在您的情况下:tdf['layout])

添加这行代码:

y_train, y_val = tdf['layout][train_index], tdf['layout][val_index]

此外,只需确保从 tdf 中删除了“布局”


推荐阅读