首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sklearn管道:在GridSearchCV中应用TimeSeriesSplit之前,在完整的训练集上运行TfidfVectorizer?

sklearn管道:在GridSearchCV中应用TimeSeriesSplit之前,在完整的训练集上运行TfidfVectorizer?
EN

Stack Overflow用户
提问于 2019-02-22 01:58:46
回答 1查看 612关注 0票数 0

我确信这是可能的,但我还没能弄明白。使用带有num_split=5TimeSeriesSplit给出一个训练数据集,拆分如下所示:

代码语言:javascript
复制
[0] : [1]
[0 1] : [2]
[0 1 2] : [3]
[0 1 2 3] : [4]
[0 1 2 3 4] : [5]

问题是对于前几个通道,TfidfVectorizer使用的是名义数量的词汇/特征,我想在拆分之前在整个训练集上运行它,以便所有拆分的特征大小保持相同。

然而,除此之外,有没有人知道一种方法,在使用TimeSeriesSplit时,只通过该系列中的最后两个拆分?因此,GridSearchCV只使用这两个拆分,而不是全部5个拆分:

代码语言:javascript
复制
[0 1 2 3] : [4]
[0 1 2 3 4] : [5]

这将允许更好的矢量化拟合,即使它在两次传递之间不是完全相同的--至少在验证之前它有更大的部分要处理。

谢谢。

编辑:

我使用的管道本质上是TfidfVectorizer,然后是一个分类器。但是在对数据和特性进行一些检查后,看起来数据集在被提供给TfidVectorizer()之前已经被拆分了。下面是大体的笔划:

代码语言:javascript
复制
tscv = TimeSeriesSplit(n_splits=5)
pipe = Pipeline([('tfidf', TfidfVectorizer(), 'rfc', RandomForestClassifier()])
grid = GridSearchCV(pipe, params, cv=tscv, scoring='roc_auc')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-26 07:09:35

这似乎就是我想要的。我没有意识到你基本上可以只传递一个可迭代的cv。您所要做的就是创建一个时间序列拆分,或者任何您想要的拆分,并传递一个包含索引的迭代器。因此,如果您有一个10项数据集,并且您只需要num_split=4的最后两个时间序列拆分,则只需将以下内容传递给cv:

代码语言:javascript
复制
cv = [([0, 1, 2, 3, 4, 5], [6, 7]),
      ([0, 1, 2, 3, 4, 5, 6, 7], [8, 9]))

通过这种方式,您可以传递您想要的任何可迭代数组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54813414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档