管道对象的超参数调整

时间:2018-07-31 06:01:05

标签: scikit-learn pipeline grid-search

我有这个管道,

pl = Pipeline([
    ('union', FeatureUnion(
        transformer_list = [
            ('numeric_features', Pipeline([
                ("selector", get_numeric_data),
        ])),
            ('text_features', Pipeline([
                ("selector",get_text_data),
                ("vectorizer", HashingVectorizer(token_pattern=TOKENS_ALPHANUMERIC,non_negative=True, norm=None, binary=False, ngram_range=(1,2))),
                ('dim_red', SelectKBest(chi2, chi_k))
            ]))
         ])), ("clf",LogisticRegression())
    ])

当我尝试做

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import GridSearchCV
c_space = np.logspace(-5, 8, 15)
param_grid = {"C": c_space,"penalty": ['l1', 'l2']}
logreg_cv = GridSearchCV(pl,param_grid=param_grid,cv=5)
logreg_cv.fit(X_train,y_train)

它把我扔了

  

ValueError:估算器的参数无效   管道(内存=无,        步骤= [(''工会',FeatureUnion(n_jobs = 1,        transformer_list = [(''numeric_features',管道(内存=无,        步骤= [('选择器',FunctionTransformer(accept_sparse = False,        func = at 0x00000190ECB49488>,inv_kw_args =无,        inverse_func = None,kw_args = None,pass_y = ... ty ='l2',random_state = None,        Solver ='liblinear',tol = 0.0001,        verbose = 0,warm_start = False)))。检查可用参数列表        与estimator.get_params().keys()

尽管在这种情况下,“ C”和“惩罚”合法参数。请帮我忙。

1 个答案:

答案 0 :(得分:0)

“ C”和“惩罚”是LogisticRegression的合法参数,而不是发送给GridSearchCV的管道对象。

您的管道当前包含两个组件,"union""clf"。现在,管道不知道要发送参数的哪一部分。您需要在管道中使用参数附加这些名称,以便它可以识别它们并将它们发送给正确的对象。

执行以下操作:

param_grid = {"clf__C": c_space,"clf__penalty": ['l1', 'l2']}

请注意,管道中对象的名称和参数之间有两个下划线。

它在Pipeline and FeatureUnion here的文档中有所提及:

  

流水线中的估计量参数可以使用   __语法

通过各种示例来演示用法。

在此之后,如果您要更改HashingVectorizer的ngram_range,则可以执行以下操作:

"union__text_features__vectorizer__ngram_range" : [(1,3)]