首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包含多个变量的Python for循环迭代

包含多个变量的Python for循环迭代
EN

Stack Overflow用户
提问于 2019-10-12 08:48:58
回答 1查看 550关注 0票数 1

我正在对多个数据集同时执行k折叠验证。我正在使用KFoldsklearn做10倍的验证。基本上,这将一个数据集划分为10个块,并在其中9个块上训练一个分类器,然后在剩下的第10个块上测试结果,然后执行相同的例程,但将测试集切换为一个新的第10个分区,并将其与现在包含在训练集中的旧测试集一起使用。我可以使用以下方法为单个数据集编写for循环:

代码语言:javascript
复制
for train, test in kfold.split(data):
    print(train)
    print(test)

这方面的产出如下:

代码语言:javascript
复制
[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]

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

代码语言:javascript
复制
for train0, test0, train1, test1 in kfold.split(data0), kfold.split(data1):
    # code

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-12 08:54:55

您可以在zip中使用并行迭代。

代码语言:javascript
复制
for kfold0, kfold1 in zip(kfold.split(data0), kfold.split(data1)):
   train0, test0 = kfold0
   train1, test1 = kfold1
   ...

您甚至可以在循环中直接解压元组,但我个人认为这一点可读性较差:

代码语言:javascript
复制
for (train0, test0), (train1, test1) in zip(kfold.split(data0), kfold.split(data1)):
   ...
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58352432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档