如何将最佳参数(使用 GridSearchCV)从管道传递到另一个管道
Posted
技术标签:
【中文标题】如何将最佳参数(使用 GridSearchCV)从管道传递到另一个管道【英文标题】:How to pass on best parameters (using GridSearchCV) from a pipeline to another pipeline 【发布时间】:2018-05-02 17:35:23 【问题描述】:我有一个自定义管道,我正在使用 Sklearn 的 GridSearchCV 来调整整个管道的参数。我有使用 sklearn 的最佳参数组合,但我想获得最佳参数组合并传递给另一个管道。
这是管道,
p = Pipeline([
('union', FeatureUnion(
transformer_list=[
('chargram', Pipeline([
('tfidf', TfidfVectorizer(token_pattern=r'\w')),
('kbest', SelectPercentile(score_func=chi2)),
])),
('custom', Pipeline([
('features', CustomFeatures()),
('tfidf', TfidfVectorizer()),
('kbest', SelectPercentile(score_func=chi2)),
]))
],
# weight components in FeatureUnion. Can be tuned
transformer_weights=
'chargram': 0.8,
'custom': 0.8
,
n_jobs=-1
)),
# Classifier stage
(('clf', clf)),
])
所以,在这个管道中,我也得到了分类器的参数组合,但我要做的就是获取特征联合步骤的参数并将其传递给管道,并使用另一组分类器参数传递给featureunion - 两者结合。
有没有办法做到这一点?
【问题讨论】:
虽然你有它,但你为什么要得到它?你已经拥有了。 我有多个机器学习模型要做,我不想一次又一次地调整功能并使用我在第一个分类器上测试的相同配置。 【参考方案1】:您可以像这样将参数的值保存在变量中:
transformer_list = [
('chargram', Pipeline([
('tfidf', TfidfVectorizer(token_pattern=r'\w')),
('kbest', SelectPercentile(score_func=chi2)),
])),
('custom', Pipeline([
('features', CustomFeatures()),
('tfidf', TfidfVectorizer()),
('kbest', SelectPercentile(score_func=chi2)),
]))
]
transformer_weights =
'chargram': 0.8,
'custom': 0.8
p = Pipeline([
('union', FeatureUnion(
transformer_list=transformer_list,
# weight components in FeatureUnion. Can be tuned
transformer_weights=transformer_weights,
n_jobs=-1
)),
# Classifier stage
(('clf', clf)),
])
P.S:我不知道我是否理解你!
【讨论】:
嘿,谢谢。我自己在同一行上找到了一个解决方案,您可以使用这些步骤从步骤中获取参数。因此,例如,我的代码中的 steps[0] 就是我正在寻找的内容,我将其用于其他分类器的模型构建。感谢您的帮助!以上是关于如何将最佳参数(使用 GridSearchCV)从管道传递到另一个管道的主要内容,如果未能解决你的问题,请参考以下文章
如何在GridSearchCV中使用最佳参数作为分类器的参数?
如何从 GridsearchCV 获取 feature_importances_
如何正确使用 GridSearchCV 和 cross_val_score?