提问人:Beitian Ma 提问时间:11/17/2023 最后编辑:toyota SupraBeitian Ma 更新时间:11/19/2023 访问量:42
递归样本拆分方案(带网格搜索)
A recursive sample splitting scheme (with grid searching)
问:
我有一个数据面板,例如,每个横截面中都有几个样本
import pandas as pd
import numpy as np
dates = ["2018-01-01", "2019-01-01", "2020-01-01", "2021-01-01", "2022-01-01"] * 2
dates.sort()
samples = [1, 2] * 5
df = pd.DataFrame(
{
"dates": dates,
"samples": samples
}
)
我想创建一个交叉验证生成器,我在其中进行了 3 次验证:
- 第一次,samples in 是训练样本,in 是验证样本;
["2018-01-01", "2019-01-01"]
["2020-01-01"]
- 第二次,samples in 是训练样本,in 是验证样本;
["2018-01-01", "2019-01-01", "2020-01-01"]
["2021-01-01"]
- 最后一次,samples in 是训练样本,in 是验证样本。
["2018-01-01", "2019-01-01", "2020-01-01", "2021-01-01"]
["2022-01-01"]
简而言之,训练集递归增加,而验证集保持恒定长度。
我曾考虑过功能,但问题是:PredefinedSplit()
sklearn.model_selection
- 如您所见,我没有每次都包含所有样本(无论是在测试集还是验证集中);
["2020-01-01"]
在第一次和第二次验证中处于训练集,但不是第一次验证。
这让无能为力。PredefinedSplit()
我的问题是:如何定制这个拆分方案?最好保留它,因为我想将这个拆分方案传递到网格搜索中?sklearn
GridSearchCV()
答:
0赞
Ben Reiniger
11/17/2023
#1
这本质上是 (docs) 的目的。TimeSeriesSplit
但是如果你想要更多的控制权,网格搜索和朋友的参数接受cv
可迭代的生成(训练、测试)拆分为索引数组。
因此,整数列表对的列表应该有效,例如
cv = [
([0, 1, 2, 3], [4, 5]),
([0, 1, 2, 3, 4, 5], [6, 7]),
...
]
(对于更大的示例,您应该能够使用生成器表达式和 来清理)。range
上一个:我的逻辑回归模型有多好?[关闭]
下一个:模拟正弦和余弦曲线 [已关闭]
评论