![](/img/trans.png)
[英]How to compute the average values in classification report for all folds in a K-fold Cross-validation?
[英]How does enumerate(zip(*k_fold(dataset, folds))) work?
如果我們有:
a = ['a', 'aa', 'aaa']
b = ['b', 'bb', 'bbb']
for i, (x, y) in enumerate(zip(a, b)):
print (i, x, y)
然后代碼打印:
0 a b
1 aa bb
2 aaa bbb
要遍歷兩個列表的所有元素,它們必須具有相同的大小。
現在,如果我們有以下代碼段:
for fold, (train_idx, test_idx, val_idx) in enumerate(zip(*k_fold(dataset, folds))):
pass
其中len(dataset)
= 1000 和folds
= 3,那么代碼在*k_fold(dataset, folds)
方面是如何工作的?
編輯:
我添加了我的問題所在的片段的引用,它是此代碼的第 31 行。
enumerate
函數枚舉用於遍歷一個可迭代對象,同時保持迭代次數的整數計數,因此:
>>> for number, value in enumerate(["a", "b", "c"]):
... print(number, value)
1 a
2 b
3 c
zip
函數內置函數zip
用於組合兩個可迭代對象,如下所示:
>>> a = [1, 2]
>>> b = [3, 4]
>>> list(zip(a, b))
[(1, 3), (2, 4)]
當zip
提供不同長度的可迭代對象時,它會返回一個具有最短可迭代對象長度的zip
對象。 所以:
>>> a = [1, 2, 5, 6]
>>> b = [3, 4]
>>> list(zip(a, b))
[(1, 3), (2, 4)]
Python 使用*
來解壓可迭代對象。 查看 GitHub 存儲庫,似乎k_fold
返回了一個包含 3 個元素的元組。 這樣他們就可以將k_fold
函數返回的值傳遞給可迭代對象。
獎金示例:
a = [1, 2, 5, 6, 8, 9, 10 , 11]
b = [3, 4, 12, 13 ]
c = [ 14, 15 ]
for i in enumerate(zip(a, b, c)):
print(i)
輸出:
(0, (1, 3, 14))
(1, (2, 4, 15)) -----> like they are fold, (train_idx, test_idx, val_idx)
不確定 github 上的代碼中的 train_idx、test_idx、val_idx 是什么:
train_idx, test_idx val_idx 是列表,但不知道它們填充了什么!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.