我确定这是可能的,但我无法弄清楚。使用TimeSeriesSplit
和num_split=5
给出训练数据集,拆分看起来像这样:
[0] : [1]
[0 1] : [2]
[0 1 2] : [3]
[0 1 2 3] : [4]
[0 1 2 3 4] : [5]
问题在于前几对,TfidfVectorizer
正在处理少量的vocab /功能,我希望在分割之前在整个训练集上运行该功能,以使功能尺寸保持不变对于所有拆分。
但是,除了使用TimeSeriesSplit
之外,没有人知道仅通过系列中的最后两个拆分的方法吗?因此,GridSearchCV
不是使用所有5个拆分,而是仅使用这两个拆分:
[0 1 2 3] : [4]
[0 1 2 3 4] : [5]
这将允许更好的矢量化拟合,即使遍历之间并不完全相同–至少在验证之前,它有更大的一部分可以处理。
谢谢。
编辑:
我正在使用的管道本质上是TfidfVectorizer,然后进入分类器。但是,对数据和功能进行一些检查后,看起来好像是在将数据集拆分给TfidVectorizer()之前。这是大招:
tscv = TimeSeriesSplit(n_splits=5)
pipe = Pipeline([('tfidf', TfidfVectorizer(), 'rfc', RandomForestClassifier()])
grid = GridSearchCV(pipe, params, cv=tscv, scoring='roc_auc')
答案 0 :(得分:0)
这似乎可以满足我的要求。没意识到您实际上只能通过cv迭代。您所要做的就是创建一个时间序列拆分,或者您想要的任何拆分,然后传递一个包含索引的可迭代对象。因此,如果您有10个项目的数据集,并且只想要num_split=4
的最后两个时间序列拆分,只需将其传递给cv:
cv = [([0, 1, 2, 3, 4, 5], [6, 7]),
([0, 1, 2, 3, 4, 5, 6, 7], [8, 9]))
通过这种方式,您可以传递想要的任何元组。