如何确保来自特定组的所有样本都在 sklearn cross_val_predict 中的 train/test 中?
How to ensure all samples from specific group are all togehter in train/test in 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
arg,但不是很清楚,我没有找到任何示例。
使用GroupKFold
as parameter for cv
in cross_val_predict()
:
scores = cross_val_score(model, X, y, groups, cv=GroupKFold())
请注意,groups
数组表示数据中我们希望位于同一 training/test 集合中的组。它不是 class 个标签的数组。
例如:
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))
我有一个数据框,其中每个样本都属于一个组。例如:
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
arg,但不是很清楚,我没有找到任何示例。
使用GroupKFold
as parameter for cv
in cross_val_predict()
:
scores = cross_val_score(model, X, y, groups, cv=GroupKFold())
请注意,groups
数组表示数据中我们希望位于同一 training/test 集合中的组。它不是 class 个标签的数组。
例如:
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))