因此,我需要使用预定义的组生成测试/训练/验证拆分。我不想使用 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))
这使:
70
38
其中测试大小是整个集合的 35%(它应该是 10%)。
所以,要么我遗漏了什么,要么文档只是错误的描述。
梵蒂冈之花
慕沐林林
相关分类