在管道/gridSearch 中使用 TFI/DF 和 CountVectorizer
Posted
技术标签:
【中文标题】在管道/gridSearch 中使用 TFI/DF 和 CountVectorizer【英文标题】:Using TFI/DF and CountVectorizer in a pipeline/gridSearch 【发布时间】:2020-02-10 10:37:08 【问题描述】:我正在尝试在一个管道中使用 TFI/DF 和 CountVectorizer。 我做了以下事情:
pipe = Pipeline([
('tfic', TfidfVectorizer()),
('cvec', CountVectorizer()),
('lr' ,LogisticRegression())
])
及参数:
pipe_parms =
'cvec__max_features' : [100,500],
'cvec__ngram_range' : [(1,1),(1,2)],
'cvec__stop_words' : [ 'english', None]
网格搜索:
gs = GridSearchCV(pipe, param_grid= pipe_parms, cv=3)
我遇到了一个错误
未找到下层。
使用countVectorizer
或TfidfVectorizer
可以,但不能同时使用。
我阅读了有关 *** 的其他问题,他们表示如果我希望两者都使用一个管道工作,我应该使用 TfidfTransformer()
。
这样做,我收到一个错误“无法将字符串转换为浮点数”
有没有办法在一个管道中使用两个矢量化器?或您建议的其他方法。
谢谢
编辑: 我找到了一个使用 FeatureUnion 组合 2 个并行转换器(在本例中为 count 和 Tfidf 矢量化器)的解决方案。 我在这里写了一篇关于它的简短博客文章: https://link.medium.com/OPzIU0T3N0
【问题讨论】:
【参考方案1】:希望我的解释能让您更清楚地了解这里发生的事情。
首先您尝试应用TfidfVectorizer
转换。这会将文本集合更改为由数字组成的 TfidfVector。假设你有这个文本列表
texts = [
'I am a bird',
'a crow is a bird',
'bird fly high in the sky',
'bird bird bird',
'black bird in the dead of night',
'crow is black bird'
]
运行
TfidfVectorizer().fit_transform(texts).todense()
将导致
matrix([[0.91399636, 0.40572238, 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. ],
[0. , 0.35748457, 0. , 0.66038049, 0. ,
0. , 0. , 0. , 0.66038049, 0. ,
0. , 0. , 0. ],
...])
然后,从这个数字矩阵中,您尝试应用 CountVectorizer
,我认为这不是您想要的。如果没有Pipeline
,你的代码会是这样的
CountVectorizer().fit_transform(
TfidfVectorizer().fit_transform(texts).todense()
)
根据scikit-learn's documentation CountVectorizer
接受字符串或字节序列而不是数字。
有没有办法在一个管道中使用两个矢量化器?或者你有什么其他的建议?
我建议您使用CountVectorizer
或TfidfVectorizer
之一,不要在1 个管道中同时使用。通俗地说,CountVectorizer
将输出您传递的字符串集合中每个单词的频率,而TfidfVectorizer
还将输出每个单词的标准化频率。话虽如此,这两种方法都有相同的目的:使用频率将文本集合更改为数字。因此,您应该只使用其中之一。
如果您详细说明,我很乐意添加我的答案,为什么要在一个管道中使用两个矢量化器。
【讨论】:
非常感谢您的回答,这有助于解释我不知道的不同事情。我发现使用 FeatureUnion 实际上可以让您在一个管道中同时执行两个矢量化器。我写了这个。 link.medium.com/OPzIU0T3N0以上是关于在管道/gridSearch 中使用 TFI/DF 和 CountVectorizer的主要内容,如果未能解决你的问题,请参考以下文章
带有 SkLearn 管道的 GridSearch 无法正常工作
在 GridSearch CV 之后进行预测时是不是遵循管道步骤