Pipelin网格搜索后的变压器参数更新

2024-06-26 01:51:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个用于文本分析和分类的简单管道,包括一个CountVectorizer、一个tfiddtransformer,最后是一个多项式naivebayes分类器。

from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import Pipeline

text_clf = Pipeline([('vect', CountVectorizer()),
                 ('tfidf', TfidfTransformer()),
                 ('clf', MultinomialNB())])

现在,我使用GridSearchCV确定最佳参数(stop_words包含以前加载的stop words列表):

^{pr2}$

我现在可以使用grid_clf.best_params_查看模型的最佳参数:

{'clf__alpha': 0.050000000000000003,
'tfidf__use_idf': True,
'vect__ngram_range': (1, 3),
'vect__stop_words': None}

我的问题是:我怎样才能得到一个更新的管道,其中包含网格搜索返回的最佳参数?我希望能够使用适当的参数调用管道的前两个步骤(CountVectorizer和tfiddTransformer)。

我发现的一个解决方法是显式地创建一个新管道,其中包含网格搜索返回的最佳参数:

multinomial_clf = Pipeline([('vect', CountVectorizer(stop_words=None, ngram_range=(1,3))),
                 ('tfidf', TfidfTransformer(use_idf = True)),
                 ('clf', MultinomialNB(alpha=0.05))])
_ = multinomial_clf.fit(X_train, y_train)

我现在可以使用multinomial_clf.steps访问CountVectorizer和tfiddTransformer,但我确信一定有更简单的方法。

非常感谢你的帮助!


Tags: fromimport参数管道pipelinesklearntfidfstop
1条回答
网友
1楼 · 发布于 2024-06-26 01:51:46

使用grid_clf.best_estimator_可以找到具有最佳参数的管道

grid_clf.best_estimator_

Pipeline(steps=[('vect', CountVectorizer(analyzer='word', binary=False, decode_error='strict',
    dtype=<class 'numpy.int64'>, encoding='utf-8', input='content',
    lowercase=True, max_df=1.0, max_features=None, min_df=1,
    ngram_range=(1, 3), preprocessor=None, stop_words=None,
    strip...near_tf=False, use_idf=True)), ('clf', MultinomialNB(alpha=0.02, class_prior=None, fit_prior=True))])

然而,我仍然困惑于如何利用管道的变压器进行改造。前两个步骤实现转换方法,而最后一个步骤不实现。但如果我试着打电话:

^{pr2}$

我得到以下错误:

AttributeError: 'MultinomialNB' object has no attribute 'transform'

谢谢你的帮助

相关问题 更多 >