Scikits-learn:在Pipeline中使用自定义词汇

5 投票
1 回答
2289 浏览
提问于 2025-04-16 21:00

在我的scikit-learn管道中,我想给CountVectorizer()传递一个自定义的词汇表:

text_classifier = Pipeline([
    ('count', CountVectorizer(vocabulary=myvocab)),
    ('tfidf', TfidfTransformer()),
    ('clf', LinearSVC(C=1000))
])

但是,按照我的理解,当我调用

text_classifier.fit(X_train, y_train)

管道会使用CountVectorizer()的fit_transform()方法,这个方法会忽略我的词汇表。请问我该如何修改我的管道来使用我的词汇表呢?谢谢!

1 个回答

9

这是我刚刚修复的一个scikit-learn中的错误,修复时间是五分钟前。感谢你发现了这个问题。我建议你要么从Github上升级到最新版本,要么把向量化器和管道分开使用,作为一种临时解决办法:

count = CountVectorizer(vocabulary=myvocab)
X_vectorized = count.transform(X_train)

text_classifier = Pipeline([
    ('tfidf', TfidfTransformer()),
    ('clf', LinearSVC(C=1000))
])

text_classifier.fit(X_vectorized, y_train)

更新:自从这个回答发布以来,这个修复已经被包含在多个scikit-learn的版本中。

撰写回答