当我从管道中删除 RF 模型时,它会失去准确性
Posted
技术标签:
【中文标题】当我从管道中删除 RF 模型时,它会失去准确性【英文标题】:RF model loses accuracy when I remove it from Pipeline 【发布时间】:2019-04-13 23:50:44 【问题描述】:希望我在这里忽略了一些愚蠢的事情,或者我不明白这是如何工作的......
我有一个 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 包含的数据集之一使您的示例可重现? scikit-learn.org/stable/tutorial/text_analytics/… 【参考方案1】:对于测试集,不能调用fit_transform()
,只能调用transform()
,否则tfidf向量的元素含义不同。
试试这个
# predict
clf.predict(tfidf.transform(X_test))
【讨论】:
以上是关于当我从管道中删除 RF 模型时,它会失去准确性的主要内容,如果未能解决你的问题,请参考以下文章