在没有 sklearn 的情况下创建 Kfold 交叉验证集
Creating Kfold cross validation set without sklearn
我正在尝试使用训练集和测试集将我的数据拆分为 K 折。我卡在了最后:
我有一个数据集例子:
[1,2,3,4,5,6,7,8,9,10]
我已成功创建用于 5 折交叉验证的分区,输出为
fold=[[2, 1], [6, 0], [7, 8], [9, 5], [4, 3]]
现在我想创建 K 个具有 K-1 个训练数据和 1 个验证集的实例。
我正在使用此代码:
```
cross_val={"train":[],"test":[]}
new_fold=folds.copy()
for i in range(4):
val=folds.pop(i)
cross_val["train"].append(folds)
cross_val["test"].append(val)
folds[i:i]=[val]```
我得到的输出是:
{'train': [[[6, 0], [7, 8], [9, 5], [4, 3]],
[[6, 0], [7, 8], [9, 5], [4, 3]],
[[6, 0], [7, 8], [9, 5], [4, 3]],
[[6, 0], [7, 8], [9, 5], [4, 3]]],
'test': [[6, 0], [7, 8], [9, 5], [4, 3]]}
这是我得到的错误输出。
但我希望输出为
train test
[[6, 0], [7, 8], [9, 5], [4, 3]] [2,1]
[[2, 1], [7, 8], [9, 5], [4, 3]] [6,0]
[[6, 0], [2, 1], [9, 5], [4, 3]] [7,8]
[[6, 0], [7, 8], [9, 5], [2, 1]] [4,3]
[[6, 0], [7, 8], [2, 1], [4, 3]] [9,5]
您每次都在此处对相同 列表进行编辑,并将该列表追加多次 次。因此,如果您编辑列表,您会在列表的所有元素中看到该编辑。
您可以使用以下方法创建交叉验证:
train = []
test = []
cross_val={'train': train, 'test': test}
for i, testi in enumerate(fold):
train.append(fold[:i] + fold[i+1:])
test.append(testi)
对于给定的样本数据,这给了我们:
>>> pprint(cross_val)
{'test': [[2, 1], [6, 0], [7, 8], [9, 5], [4, 3]],
'train': [[[6, 0], [7, 8], [9, 5], [4, 3]],
[[2, 1], [7, 8], [9, 5], [4, 3]],
[[2, 1], [6, 0], [9, 5], [4, 3]],
[[2, 1], [6, 0], [7, 8], [4, 3]],
[[2, 1], [6, 0], [7, 8], [9, 5]]]}
我正在尝试使用训练集和测试集将我的数据拆分为 K 折。我卡在了最后:
我有一个数据集例子:
[1,2,3,4,5,6,7,8,9,10]
我已成功创建用于 5 折交叉验证的分区,输出为
fold=[[2, 1], [6, 0], [7, 8], [9, 5], [4, 3]]
现在我想创建 K 个具有 K-1 个训练数据和 1 个验证集的实例。
我正在使用此代码:
```
cross_val={"train":[],"test":[]}
new_fold=folds.copy()
for i in range(4):
val=folds.pop(i)
cross_val["train"].append(folds)
cross_val["test"].append(val)
folds[i:i]=[val]```
我得到的输出是:
{'train': [[[6, 0], [7, 8], [9, 5], [4, 3]],
[[6, 0], [7, 8], [9, 5], [4, 3]],
[[6, 0], [7, 8], [9, 5], [4, 3]],
[[6, 0], [7, 8], [9, 5], [4, 3]]],
'test': [[6, 0], [7, 8], [9, 5], [4, 3]]}
这是我得到的错误输出。
但我希望输出为
train test
[[6, 0], [7, 8], [9, 5], [4, 3]] [2,1]
[[2, 1], [7, 8], [9, 5], [4, 3]] [6,0]
[[6, 0], [2, 1], [9, 5], [4, 3]] [7,8]
[[6, 0], [7, 8], [9, 5], [2, 1]] [4,3]
[[6, 0], [7, 8], [2, 1], [4, 3]] [9,5]
您每次都在此处对相同 列表进行编辑,并将该列表追加多次 次。因此,如果您编辑列表,您会在列表的所有元素中看到该编辑。
您可以使用以下方法创建交叉验证:
train = []
test = []
cross_val={'train': train, 'test': test}
for i, testi in enumerate(fold):
train.append(fold[:i] + fold[i+1:])
test.append(testi)
对于给定的样本数据,这给了我们:
>>> pprint(cross_val)
{'test': [[2, 1], [6, 0], [7, 8], [9, 5], [4, 3]],
'train': [[[6, 0], [7, 8], [9, 5], [4, 3]],
[[2, 1], [7, 8], [9, 5], [4, 3]],
[[2, 1], [6, 0], [9, 5], [4, 3]],
[[2, 1], [6, 0], [7, 8], [4, 3]],
[[2, 1], [6, 0], [7, 8], [9, 5]]]}