【发布时间】:2019-08-04 04:14:21
【问题描述】:
我的 sklearn 管道中有一个自定义 Transformer,我想知道如何将参数传递给我的 Transformer:
在下面的代码中,您可以看到我在 Transformer 中使用了字典“权重”。我不想在我的 Transformer 中定义这个字典,而是从管道传递它,这样我就可以在网格搜索中包含这个字典。是否可以将字典作为参数传递给我的 Transformer ?
# My custom Transformer
class TextExtractor(BaseEstimator, TransformerMixin):
"""Concat the 'title', 'body' and 'code' from the results of
Stackoverflow query
Keys are 'title', 'body' and 'code'.
"""
def fit(self, x, y=None):
return self
def transform(self, x):
# here is the parameter I want to pass to my transformer
weight ={'title' : 10, 'body': 1, 'code' : 1}
x['text'] = weight['title']*x['Title'] +
weight['body']*x['Body'] +
weight['code']*x['Code']
return x['text']
param_grid = {
'min_df' : [10],
'max_df' : [0.01],
'max_features': [200],
'clf' : [sgd]
# here is the parameter I want to pass to my transformer
'weigth' : [{'title' : 10, 'body': 1, 'code' : 1}, {'title' : 1, 'body':
1, 'code' : 1}]
}
for g in ParameterGrid(param_grid) :
classifier_pipe = Pipeline(
steps=[ ('textextractor', TextExtractor()), #is it possible to pass
my parameter ?
('vectorizer', TfidfVectorizer(max_df=g['max_df'],
min_df=g['min_df'], max_features=g['max_features'])),
('clf', g['clf']),
],
)
【问题讨论】:
标签: scikit-learn pipeline transformer