将分区数据集拆分为训练和测试(训练数据每个类有 200 个示例)
Posted
技术标签:
【中文标题】将分区数据集拆分为训练和测试(训练数据每个类有 200 个示例)【英文标题】:Split partition dataset into training and test (The training data has 200 examples of each class) 【发布时间】:2018-01-01 15:18:39 【问题描述】:我有一个 5 类数据。每个类中大约有 1000、1200、1500、1900、2000 个样本。我想在训练数据中有每个类的 200 个示例。其他样本将是测试数据。也就是说,训练数据将由每个类别中的 [200, 200, 200, 200, 200] 个样本组成,测试数据将由每个类别中的 [800, 1000, 1300, 1700, 1800] 个样本组成。
我们如何在 Python 中做到这一点?在 Python 中是否有任何预定义的方法/包来执行此操作?
其他例子
train_test_split(data, labels, train_size=
0.0042)
Label Number Total Samples Train Samples Test Samples
1 6631 33 6598
2 18649 89 18560
3 2099 6 2093
4 3064 11 3053
5 1345 5 1340
6 5029 26 5003
7 1330 3 1327
8 3682 21 3661
9 947 6 941
Total 42776 200 42576
train_test_split(data, labels, train_size=
200)
Label Number Total Samples Train Samples Test Samples
1 6631 33 6598
2 18649 89 18560
3 2099 6 2093
4 3064 11 3053
5 1345 5 1340
6 5029 26 5003
7 1330 3 1327
8 3682 21 3661
9 947 6 941
Total 42776 200 42576
所以,我希望它是这样的:
Label Number Total Samples Train Samples Test Samples
1 6631 200 6431
2 18649 200 18449
3 2099 200 1899
4 3064 200 2864
5 1345 200 1145
6 5029 200 4829
7 1330 200 1130
8 3682 200 3482
9 947 200 747
Total 42776 1800 40976
【问题讨论】:
你到现在都做了什么? 我用谷歌搜索,但找不到有效的解决方案。train_test_split
函数中的train_size
参数不是解决方案。如果int
是,则自动计算百分比。
如果int自动计算百分比是什么意思?
【参考方案1】:
您可以将sklearn.model_selection.train_test_split
的train_size
参数设置为一个整数值,在您的情况下,该值表示训练样本的绝对数量200。如果它是一个浮点数,它应该介于 0.0 到 1.0 之间,以表示您要考虑的训练样本的比例。例如,0.8 表示 80%。
【讨论】:
如果参数train_size
为200,则每类训练数据的元素个数分别为[26,32,39,50,53]。训练数据中的样本总数是 200。我不想要这个。每个类包含 200 个样本,因此您在训练数据中总共有 1000 个样本。
那么,如果你把 1000 写成train_size
,它不会是 200,而是 200 左右,它是否相等真的很重要吗?
很抱歉我不能告诉你我的问题。我在问题中添加了一个详细的示例。我希望它可以解释。
您的问题现在更清楚了。我只能想到首先创建 5 个单独的 DataFrame,每个 DataFrame 包含 1 个类/标签的样本。使用 train_size = 200 对它们中的每一个应用 train_test_split。这将为您提供 5 个训练集和 5 个测试集,您可以通过 Python 组合它们以获得单个训练和测试集。以上是关于将分区数据集拆分为训练和测试(训练数据每个类有 200 个示例)的主要内容,如果未能解决你的问题,请参考以下文章