Scikitlearn,GroupKFold与洗牌组?

2024-05-20 06:47:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是scikit learn的StratifiedKFold,但现在我还需要观察“组”。有很好的函数GroupKFold,但我的数据非常依赖时间。与“帮助”中的情况类似(周数是分组指数)。但每个星期都应该只有一次。在

假设我需要10倍。我需要的是在使用GroupKFold之前先对数据进行洗牌。在

洗牌是在团体的意义上-所以整个团体应该互相洗牌。在

有没有办法用scikit学会优雅?在我看来,GroupKFold很健壮,可以先洗牌数据。在

如果没有办法用scikit来实现,那么有人可以编写一些有效的代码吗?我有大量的数据集。在

矩阵、标签、分组作为输入


Tags: 数据函数代码时间情况scikit指数learn
1条回答
网友
1楼 · 发布于 2024-05-20 06:47:13

编辑:此解决方案不起作用。在

我认为使用sklearn.utils.shuffle是一个优雅的解决方案!在

对于X、y和组中的数据:

from sklearn.utils import shuffle
X_shuffled, y_shuffled, groups_shuffled = shuffle(X, y, groups, random_state=0)

然后使用xu shuffled、y\u shuffled和groups\u shuffled with GroupKFold:

^{pr2}$

当然,您可能需要多次洗牌,并对每次洗牌进行交叉验证。你可以把整个事情放在一个循环中——这里有一个完整的例子,有5次洗牌(只有3次,而不是你要求的10次):

X = np.arange(20).reshape((10, 2))
y = np.arange(10)
groups = [0, 0, 0, 1, 2, 3, 4, 5, 6, 7]

n_shuffles = 5
group_k_fold = GroupKFold(n_splits=3)

for i in range(n_shuffles):
    X_shuffled, y_shuffled, groups_shuffled = shuffle(X, y, groups, random_state=i)
    splits = group_k_fold.split(X_shuffled, y_shuffled, groups_shuffled)
    # do something with splits here, I'm just printing them out
    print 'Shuffle', i
    print 'groups_shuffled:', groups_shuffled
    for train_idx, val_idx in splits:
        print 'Train:', train_idx
        print 'Val:', val_idx

相关问题 更多 >