gpt4 book ai didi

python - Pandas:如何在不使用 scikit 的情况下进行交叉验证?

转载 作者:行者123 更新时间:2023-11-30 09:25:17 26 4
gpt4 key购买 nike

我正在尝试实现我自己的交叉验证功能。我读到了关于交叉验证的信息link ,并且能够将我的数据集分为训练和测试。但是我如何定义折叠呢?例如,我的数据框如下所示。

    Dataframe:
MMC MET_lep MASS_Vis Pt_H Y
0 138.70 51.65 97.82 0.91 0
1 160.93 68.78 103.23 -999.00 0
2 -999.00 162.17 125.95 -999.00 0
3 143.90 81.41 80.94 -999.00 1
4 175.86 16.91 134.80 -999.00 0
5 -999.00 162.17 125.95 -999.00 0
6 143.90 81.41 80.94 -999.00 1
7 175.86 16.91 134.80 -999.00 0
8 -999.00 162.17 125.95 -999.00 0
9 143.90 81.41 80.94 -999.00 1

并且想要这样的输出:

For    K=3 (Folds)

When K=1
Training:
MMC MET_lep MASS_Vis Pt_H Y
0 138.70 51.65 97.82 0.91 0
1 160.93 68.78 103.23 -999.00 0
2 -999.00 162.17 125.95 -999.00 0
3 143.90 81.41 80.94 -999.00 1
4 175.86 16.91 134.80 -999.00 0
5 -999.00 162.17 125.95 -999.00 0
6 143.90 81.41 80.94 -999.00 1
Test:
7 175.86 16.91 134.80 -999.00 0
8 -999.00 162.17 125.95 -999.00 0
9 143.90 81.41 80.94 -999.00 1

When K=2
Training:
MMC MET_lep MASS_Vis Pt_H Y
0 138.70 51.65 97.82 0.91 0
1 160.93 68.78 103.23 -999.00 0
2 -999.00 162.17 125.95 -999.00 0
6 143.90 81.41 80.94 -999.00 1
7 175.86 16.91 134.80 -999.00 0
8 -999.00 162.17 125.95 -999.00 0
9 143.90 81.41 80.94 -999.00 1

Test:
3 143.90 81.41 80.94 -999.00 1
4 175.86 16.91 134.80 -999.00 0
5 -999.00 162.17 125.95 -999.00 0

When K=3
Training:
MMC MET_lep MASS_Vis Pt_H Y
0 138.70 51.65 97.82 0.91 0
1 160.93 68.78 103.23 -999.00 0
2 -999.00 162.17 125.95 -999.00 0
3 143.90 81.41 80.94 -999.00 1
7 175.86 16.91 134.80 -999.00 0
8 -999.00 162.17 125.95 -999.00 0
9 143.90 81.41 80.94 -999.00 1
Test:
4 175.86 16.91 134.80 -999.00 0
5 -999.00 162.17 125.95 -999.00 0
6 143.90 81.41 80.94 -999.00 1

下面是我的代码,它执行分割工作但不执行折叠:

 split = math.floor(dataset.shape[0]*0.8)
data_train = dataset[:split]
data_test = dataset[split:]

预先感谢您对此提供的帮助。

最佳答案

您是否打算让 K=2 折叠与 K=3 测试折叠 (3,4,5) 与 (4,5,6) 重叠?另外,在您的示例中,K 似乎被重载,既表示折叠数,又表示当前折叠的索引。在我的回答中,我将使用 i 来表示 k 次折叠中的第 i 次折叠。

假设目标是创建不重叠的折叠,那么拥有一个生成 0 到 len(dataset) - 1 范围之外的大致均匀范围的函数就足够了。即使您的列表不能被地板上的 k 分割完全整除((n*i)/k)。在Python中你可以使用这样的函数:

def fold_i_of_k(dataset, i, k):
n = len(dataset)
return dataset[n*(i-1)//k:n*i//k]

这是一个一维数据集的示例(对于 DataFrame 应该同样有效):

>>> fold_i_of_k(list(range(0,11)),1,3)
[0, 1, 2]
>>> fold_i_of_k(list(range(0,11)),2,3)
[3, 4, 5, 6]
>>> fold_i_of_k(list(range(0,11)),3,3)
[7, 8, 9, 10]

关于python - Pandas:如何在不使用 scikit 的情况下进行交叉验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43442072/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com