为了账号安全,请及时绑定邮箱和手机立即绑定

sklearn.model_selection.GroupShuffleSplit

sklearn.model_selection.GroupShuffleSplit

RISEBY 2021-11-23 19:02:29
因此,我需要使用预定义的组生成测试/训练/验证拆分。我不想使用 LeavePGroupsOut,因为我需要根据所需的百分比将数据分成训练和验证集。在 GroupShuffleSplit 的文档中,对于test_size参数,是这样说的:test_size : float, int, None, optional 如果是float,应该在0.0到1.0之间,代表数据集在测试分割中的比例。如果是 int,则表示测试样本的绝对数量。如果为 None,则该值设置为列车大小的补码。默认情况下,该值设置为 0.2。默认值将在 0.21 版中更改。仅当未指定 train_size 时,它将保持 0.2,否则它将补充指定的 train_size。然而,事实并非如此,如以下代码所示:tr, ts = next(GroupShuffleSplit(n_splits=1, test_size=3).split(TR_set, groups=tr_groups))print(tr)print(ts)例如打印出来:[  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  91  92  93  99 101 102 103 104 105 106 107][ 26  27  89  90  94  95  96  97  98 100]正如您在上面看到的,测试大小不是 3,而是大于 3。这几乎总是如此。我检查了指数组。显然,如果 test_size 是一个整数,它表示测试组的绝对数量,而不是 samples。我认为文档具有误导性。此外,当 test_size 是浮点数时,它主要不考虑指定的比率。这可能是由于组中的样本大小不相等,但必须有一个注释/警告来指定在不相等的组大小与 test_size 比率相结合的情况下它遵循什么样的行为。tr, ts = next(GroupShuffleSplit(n_splits=1, test_size=0.1).split(TR_set, groups=tr_groups))print(len(tr))print(len(ts))这使:7038其中测试大小是整个集合的 35%(它应该是 10%)。所以,要么我遗漏了什么,要么文档只是错误的描述。
查看完整描述

2 回答

?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

我在 GroupShuffleSplit 文档中找到了这个:

注意:参数 test_size 和 train_size 指的是组,而不是像 ShuffleSplit 中的样本。

因此, test_size 预计是组数,这也是您在结果中发现的。


查看完整回答
反对 回复 2021-11-23
?
慕沐林林

TA贡献2016条经验 获得超9个赞

没有错误,但文档在某些方面不正确。我在scikit-learn 的 github 页面中为此主题打开了一个问题。


查看完整回答
反对 回复 2021-11-23
  • 2 回答
  • 0 关注
  • 202 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信