从管道中移除RF模型后,准确性下降

3
希望我没有忽略什么愚蠢的事情,或者我可能不理解这是如何工作的...
我有一个NLP管道,基本上执行以下操作:
rf_pipeline = Pipeline([
('vect', TfidfVectorizer(tokenizer = spacy_tokenizer)),
('fit', RandomForestClassifier())
])

我运行它:

clf = rf_pipeline.fit(X_train, y_train)
preds = clf.predict(X_test)

当我进行优化时,以下内容可以使准确率达到90%以上:

confusion_matrix(y_test, preds)
accuracy_score(y_test, preds)
precision_score(y_test, preds)

TfidfVectorizer在我的计算中是瓶颈,所以我想拆分管道。运行向量化器,然后对分类器进行网格搜索,而不是在整个管道上运行它。这是我如何拆分的:

# initialize
tfidf = TfidfVectorizer(tokenizer = spacy_tokenizer)
# transform and fit
vect = tfidf.fit_transform(X_train)
clf = rf_class.fit(vect, y_train)
# predict
clf.predict(tfidf.fit_transform(X_test))

在进行完整的网格搜索之前,我查看了准确性,它已经降至仅略高于50%。当我尝试增加树的数量时,分数下降了近10%。

有什么想法吗?


你能否通过使用scikit-learn提供的数据集之一,使你的示例可复现?https://scikit-learn.org/stable/tutorial/text_analytics/working_with_text_data.html - hellpanderr
1个回答

3

对于测试集,不能使用fit_transform()方法,而只能使用transform()方法,否则tfidf向量中的元素会具有不同的含义。

请尝试以下代码:

# predict
clf.predict(tfidf.transform(X_test))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接