Sklearn Pipeline:在GridSearchCV中应用LimeSeriessPlit之前,请在完整训练集上运



我敢肯定这是可能的,但我无法弄清楚。使用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正在使用标称词汇/功能,我想在分裂之前在整个训练集上运行该功能,以使功能大小保持相同,以用于所有分裂。

禁止这样做,但是有人知道使用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')

这似乎可以做我想要的。没有意识到您本质上只能通过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]))

以这种方式,您可以通过想要的任何元组。

最新更新