创建定义比例的随机训练测试拆分,同时保持每组中一个属性的排他性

Create random train-test split of defined proportion while maintaining exclusivity of one attribute in each set

我有多个不同长度的集合,我希望将这些集合随机分类为两个超集,这样:

  1. 任何一组只出现在一个超集中,
  2. 超集中所有集合的长度之和尽可能接近a 所有集合的长度之和的定义比例。

示例:

给定以下集合:

Set1 Set2 Set3 Set4 Set5 Set6
Length 1 2 3 4 5 6

这些是一些可能的超集:

Target Proportion Superset1 Superset2
50% - 50% (set1,set2,set3,set4) (1+2+3+4) Total length = 10 (set5,set6) (5+6) Total length = 11
50% - 50% (set4,set6) (4+6) Total length = 10 (set1,set2,set3,set5) (1+2+3+5) Total length = 11
60% - 40% (set2,set5,set6) (2+5+6) Total length = 13 (set1,set3,set4) (1+3+4) Total length = 8
90% - 10% (set2) (2) Total length = 2 (set1,set3,set4,set5,set6) (1+3+4+5+6) Total length = 19

实际上我的集合有几千个长度,但为了简化说明我使用了较小的值。

此任务的目的是将数据集拆分为训练集和测试集,以便在 python 和 scikit-learn 中进行机器学习。通常我会使用 scikit-learn 中包含的训练测试拆分函数,但(据我所知)在这种情况下是不够的,因为不是随机拆分所有行,训练数据中的任何行都不能与任何行共享一个集合测试数据中的行(在这种情况下,任何给定行的 'set' 是数据集中的列之一)。

到目前为止,我只是简单地使用了 scikit train-test 函数来拆分集合而不是实际的数据行,但是根据集合的长度,训练集和测试集显然会偏离所需的比例.

打个比方,假设我有一份房价清单以及平方英尺、花园大小和到最近学校的距离,并且我有不同国家/地区的相同清单。最终的任务是预测我们没有任何房价数据但我们有所有其他数据的国家/地区的房价。因此,为了评估我们的预测算法的性能,训练集必须包含与测试集完全不同的国家。

我对如何实际实现这一点有点空白,大概有一个这个一般问题的名称,但我不确定要寻找什么。

非常感谢任何帮助或指点。

我能够通过使用 https://github.com/Yoyodyne-Data-Science/GroupStratifiedShuffleSplit 获得此行为。作者是这样描述的:

generates stratified and grouped cross validation folds

这会创建所需的拆分比例,同时还确保我需要保持分开的组在拆分中仍然是分开的。