Python for 多变量循环迭代

Python for loop iteration with multiple variables

我同时对多个数据集执行 k 折验证。我正在使用 sklearn 中的 KFold 进行 10 次验证。基本上,这会将一个数据集分成 10 个部分,并在其中的 9 个部分上训练分类器,然后在剩余的第 10 个部分上测试结果,然后执行相同的例程,但将测试集切换为新的第 10 个分区,现在包括旧测试集在训练集中。我可以使用以下代码为单个数据集编写 for 循环:

for train, test in kfold.split(data):
    print(train)
    print(test)

输出如下:

[1 2 3 4 5 6 7 8 9]
[0]
[0 2 3 4 5 6 7 8 9]
[1]
[0 1 3 4 5 6 7 8 9]
[2]
[0 1 2 4 5 6 7 8 9]
[3]
[0 1 2 3 5 6 7 8 9]
[4]
[0 1 2 3 4 6 7 8 9]
[5]
[0 1 2 3 4 5 7 8 9]
[6]
[0 1 2 3 4 5 6 8 9]
[7]
[0 1 2 3 4 5 6 7 9]
[8]
[0 1 2 3 4 5 6 7 8]
[9]

其中第一个数组是要从数组的初始数据集数组中使用的训练集的索引,第二个数组是测试集的索引。我可以让它正确地迭代一个数据集。但是,我将如何同时对多个数据集执行此操作?例如,如果我想使用来自多个集合的特定折叠来创建分类器。我尝试了以下方法:

for train0, test0, train1, test1 in kfold.split(data0), kfold.split(data1):
    # code

但我收到以下错误:ValueError: too many values to unpack (expected 4)

您可以使用 zip 的并行迭代:

for kfold0, kfold1 in zip(kfold.split(data0), kfold.split(data1)):
   train0, test0 = kfold0
   train1, test1 = kfold1
   ...

您甚至可以直接在循环中解压元组,但我个人认为这不太可读:

for (train0, test0), (train1, test1) in zip(kfold.split(data0), kfold.split(data1)):
   ...