【发布时间】:2021-08-29 06:08:38
【问题描述】:
来自文档 (https://scikit-learn.org/stable/modules/cross_validation.html#group-k-fold):
GroupKFold 是 k-fold 的一种变体,可确保同一组不会同时出现在测试和训练集中
然后,稍微修改一下这个例子,我们有:
from sklearn.model_selection import GroupKFold
X = np.array([0.1, 0.2, 2.2, 2.4, 2.3, 4.55, 5.8, 8.8, 9, 10])
y = np.array(["a", "b", "b", "b", "c", "c", "c", "d", "d", "d"])
groups = [1, 1, 1, 2, 2, 2, 3, 3, 3, 3]
gkf = GroupKFold(n_splits=3)
for train, test in gkf.split(X, y, groups=groups):
print("%s %s" % (train, test))
哪些打印:
[0 1 2 3 4 5] [6 7 8 9]
[0 1 2 6 7 8 9] [3 4 5]
[3 4 5 6 7 8 9] [0 1 2]
在我看来,b 组 似乎在测试和训练集中,但我们有 -
[3 4 5 6 7 8 9] [0 1 2]
对于最后一个输出,其中测试索引为[0, 1, 2],这给了我们组a 和组b 中的两个值,这意味着在测试集中有一个来自组b 的值以及培训(其中索引3)。
大概文档/模块是正确的,我错了,但我不明白如何。
要明确 - 我希望在测试和训练中都不会看到同一组的值,并且确实存在。
【问题讨论】:
-
重要的是
groups,y不重要。在确定拆分时,您甚至可以将y=None传递给gkf.split、it is not used。 -
哪个变量定义了您的组?是
y还是group,如果你检查对应的group,你可以看到对于每一折,train中的groups和test中的groups是不同的
标签: python machine-learning scikit-learn cross-validation