在使用cross_validation.kfold(n,n_folds=folds)之后,我想访问培训和测试单个fold的索引,而不是访问所有折叠。
那么让我们以示例代码为例:

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'对象不支持索引”
我想要的输出:
>>> 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对象会强制它使所有值都可用。
这里有两个很好的问题来解释什么是生成器: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访问单折而不是循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27380636/

10-10 11:05