在sklearn cross_val_predict中,如何确保来自特定组的所有样本在traintest中都是togehter?

问题描述 投票:0回答:1

我有一个数据框,其中每个样本属于一个组。例如,我想运行一个数据框,其中每个样本属于一个组。

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 但它不是很清楚,我也没有找到任何例子。

python python-3.x scikit-learn cross-validation train-test-split
1个回答
0
投票

使用 GroupKFold 作为参数 cvcross_val_predict():

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))
© www.soinside.com 2019 - 2024. All rights reserved.