gpt4 book ai didi

python - sklearn Kfold 访问单折而不是 for 循环

转载 作者:太空狗 更新时间:2023-10-29 17:41:50 26 4
gpt4 key购买 nike

在使用 cross_validation.KFold(n, n_folds=folds) 之后,我想访问用于训练和测试单折的索引,而不是遍历所有折。

让我们来看示例代码:

from sklearn import cross_validation
X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]])
y = np.array([1, 2, 3, 4])
kf = cross_validation.KFold(4, n_folds=2)

>>> print(kf)
sklearn.cross_validation.KFold(n=4, n_folds=2, shuffle=False,
random_state=None)
>>> for train_index, test_index in kf:

我想像这样访问 kf 中的第一个折叠(而不是 for 循环):

train_index, test_index in kf[0]

这应该只返回第一个折叠,但我得到了错误:“TypeError: 'KFold' object does not support indexing”

我想要的输出:

>>> train_index, test_index in kf[0]
>>> print("TRAIN:", train_index, "TEST:", test_index)
TRAIN: [2 3] TEST: [0 1]

链接:http://scikit-learn.org/stable/modules/generated/sklearn.cross_validation.KFold.html

问题

如何只检索一次训练和测试的索引,而无需遍历整个 for 循环?

最佳答案

您走在正确的轨道上。您现在需要做的就是:

kf = cross_validation.KFold(4, n_folds=2)
mylist = list(kf)
train, test = mylist[0]

kf 实际上是一个生成器,它在需要时才计算训练-测试拆分。这提高了内存使用率,因为您没有存储不需要的项目。制作 KFold 对象的列表会强制它使所有值都可用。

这里有两个很好的 SO 问题来解释什么是生成器:onetwo


2018 年 11 月编辑

自 sklearn 0.20 以来,API 发生了变化。一个更新的例子(针对 py3.6):

from sklearn.model_selection import KFold
import numpy as np

kf = KFold(n_splits=4)

X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]])


X_train, X_test = next(kf.split(X))

In [12]: X_train
Out[12]: array([2, 3])

In [13]: X_test
Out[13]: array([0, 1])

关于python - sklearn Kfold 访问单折而不是 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27380636/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com