带有 HashingVectorizer 和 TfidfTransformer 的 SGDClassifier

Posted

技术标签:

【中文标题】带有 HashingVectorizer 和 TfidfTransformer 的 SGDClassifier【英文标题】:SGDClassifier with HashingVectorizer and TfidfTransformer 【发布时间】:2014-10-09 05:04:53 【问题描述】:

我想了解是否可以使用 HashingVectorizer 和 TfidfTransformer 训练在线 SGDClassifier(使用 partial_fit)。简单地将它们加入管道是行不通的,因为 TfidfTransformer 是有状态的,因此会破坏在线学习过程。 This post 说不可能以在线方式使用 tf-idf,但对 this post 的评论表明它可能以某种方式成为可能:“特别是如果您使用有状态转换器作为 TfidfTransformer,您将需要做几个传递您的数据”。如果不将整个训练集加载到内存中,这可能吗?如果是这样,怎么做?如果没有,是否有在大型数据集上将 HashingVectorizer 与 tf-idf 结合的替代解决方案?

【问题讨论】:

【参考方案1】:

如果不将整个训练集加载到内存中,这可能吗?

没有。 TfidfTransformer 需要在内存中有整个 X 矩阵。您需要滚动自己的 tf-idf 估计器,使用它在一次遍历数据中计算每个词条的文档频率,然后再进行一次遍历以生成 tf-idf 特征并为它们拟合分类器。

【讨论】:

以上是关于带有 HashingVectorizer 和 TfidfTransformer 的 SGDClassifier的主要内容,如果未能解决你的问题,请参考以下文章

不了解 sklearn 的 HashingVectorizer

从 HashingVectorizer 中检索词汇

scikit-learn - HashingVectorizer 上的 Tfidf

HashingVectorizer 后输入形状错误 Sklearn 错误

TypeError:预期的字符串或类似字节的对象 HashingVectorizer

scikit-learn 的 TfidfVectorizer 在线版