【问题标题】:Creating Kfold cross validation set without sklearn在没有 sklearn 的情况下创建 Kfold 交叉验证集
【发布时间】:2020-02-01 02:23:36
【问题描述】:

我正在尝试使用训练集和测试集将我的数据拆分为 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]

【问题讨论】:

  • 您每次都在编辑 same 列表。
  • 你能详细说明我的错误吗?想不通。

标签: python-3.x numpy k-fold


【解决方案1】:

您每次都在这里对 same 列表进行编辑,并将该列表追加 multiple 次。因此,如果您编辑列表,您会在列表的所有元素中看到该编辑。

您可以使用以下方法创建交叉折叠验证:

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]]]}

【讨论】:

    猜你喜欢
    • 2018-09-21
    • 2019-04-28
    • 2018-08-27
    • 1970-01-01
    • 2015-06-12
    • 2018-05-07
    • 2020-06-20
    • 2012-12-31
    • 2019-09-06
    相关资源
    最近更新 更多