如何确保特定组的所有样本都在 sklearn cross_val_predict 的训练/测试中在一起?



我有一个数据帧,其中每个样本都属于一个组。例如:

df = a b c group
1 1 2  G1
1 6 1  G1
8 2 8  G3
2 8 7  G2
1 9 2  G2
1 7 2  G3
4 0 2  G4
1 5 1  G4
6 7 8  G5
3 3 7  G6
1 2 2  G6
1 0 5  G7

我想运行cross_val_predict,同时确保来自同一组的所有样本都在测试中或都在训练中。 我想将数据拆分为 4 折 - 但请确保同一组的所有行在测试或训练中在一起。

因此,例如,第 0,1 行和第 4,5 行将在火车中,但第 3、6 行 (G3( 将在测试中

这可能吗?我在文档中看到了group参数,但不是很清楚,也没有找到任何示例。

cross_val_predict()中使用GroupKFold作为cv的参数:

scores = cross_val_score(model, X, y, groups, cv=GroupKFold())

请注意,groups数组表示我们希望位于同一训练/测试集中的数据中的组。它不是类标签的数组。

例如:

from sklearn.datasets import make_blobs
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import GroupKFold, cross_val_score
X, y = make_blobs(n_samples=15, random_state=0)
model = LogisticRegression()
groups = [0,0,0,1,1,1,1,2,2,2,2,3,3,3,3]
scores = cross_val_score(model, X, y, groups, cv=GroupKFold(n_splits=3))
print('cross val scores: {}'.format(scores))

最新更新