gpt4 book ai didi

python - 带有自定义折叠的嵌套交叉验证

转载 作者:行者123 更新时间:2023-11-30 09:01:05 24 4
gpt4 key购买 nike

我的数据有一列名为 pid 的列,具有相同 pid 的记录不应在训练-测试分割之间泄漏。我有一个 2 层堆叠模型 -

  • 内部层通过对训练数据进行交叉验证来构建内部预测向量
  • 然后,我在原始训练数据 + 内部预测向量上构建外部模型
  • 然后我评估测试数据的性能

这个过程应该重复X5。

我能想到的最好的方法是在外部层中按 pid % 25 进行分割,在内部层中按 pid % 5 进行分割。

代码很麻烦而且不太Pythonic。有更好的方法吗?我是否缺少 sklearn/python 的一些简洁的用法,或者我的设计中是否存在一些基本缺陷?

N = 5

for external_fold in range(N):

ex_test = [x for x in range(N**2) if external_fold*N <= x % (N**2) < (external_fold+1)*N]
ex_train = [x for x in range(N**2) if x not in ex_test]
ex_train_index = X[(X.pid % N**2).isin(ex_train)].index
ex_test_index = X[(X.pid % N**2).isin(ex_test)].index
...
for internal_fold in range(N):
in_train_index = X[(X.pid % N)!=internal_fold].index
in_test_index = X[(X.pid % N)==internal_fold].index
# build a vector of internal model predictions

# build external model and assess performance

最佳答案

您有两个需求最近才在 Scikit-Learn 中得到解决,应该包含在下一个发布的版本中:

将相关样本放在一起进行交叉验证策略

新的CV splitter classes现在包括 LabelKFoldLabelShuffleSplit ,两者旨在处理您认为具有相同 pid 的元素应位于同一测试部分中的情况。

嵌套交叉验证

交叉验证迭代器 API 已经过重新设计,以更好地支持嵌套交叉验证。您应该不再需要将数据相关参数传递给交叉验证策略构造函数。因此,将 GridSearchCV 嵌套在 GridSearchCV 中,每个都有自己的 cv 参数,应该可以满足您的需求。

请注意,此 API 仍然非常新鲜并且可以更改。

关于python - 带有自定义折叠的嵌套交叉验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36825800/

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