如何将不同的值传递给管道参数
Posted
技术标签:
【中文标题】如何将不同的值传递给管道参数【英文标题】:How to pass different values to Pipeline Parameters 【发布时间】:2021-11-22 04:53:04 【问题描述】:假设我正在对我的一个模型进行超参数调整,假设我正在使用 AdaBoostClassifier() 并且想要传递不同的 base_estimator,所以我将 SVC 和 DecisionTreeClassifier 作为估计器传递
_parameters=[
'mdl':[AdaBoostClassifier(random_state=23)],
'mdl__learning_rate':np.linspace(0,1,20),
'mdl__base_estimator':[SVC(),DecisionTreeClassifier()]
]
现在,我想将不同的值传递给 DecisionTreeClassifier 的 ccp_alpha,像这样
'mdl__base_estimator':[LinearRegression(),DecisionTreeClassifier(ccp_alpha=[0.1,0.2,0.3,0.4])]
我该怎么做,我试着像这样传递它,但它不起作用,这是我的整个代码
pipeline=Pipeline(
[
('scal',StandardScaler()),
('mdl','passthrough')
]
)
_parameters=[
'mdl':[DecisionTreeClassifier(random_state=42)] ,
'mdl__max_depth':np.linspace(2,30,2),
'mdl__min_samples_split':np.linspace(1,10,1),
'mdl__max_features':np.linspace(1,100,1),
'mdl__ccp_alpha':np.linspace(0,1,10)
,
'mdl':[AdaBoostClassifier(random_state=23)],
'mdl__learning_rate':np.linspace(0,1,20),
'mdl__base_estimator':[SVC(),DecisionTreeClassifier(ccp_alpha=[0.3,0.4,0.5,0.7])]
]
grid_search=GridSearchCV(_pipeline,_parameters,cv=3,n_jobs=-1,scoring='f1')
grid_search.fit(x,y
)
【问题讨论】:
虽然线性概率模型是一回事,但为什么要将线性回归传递给分类任务?另外,您是否查看过文档中的 nested parameters 条目? 请检查我的编辑,我以此为例来理解问题 【参考方案1】:这种拆分就是为什么 param_grid
可以是一个字典列表,就像在你的外部拆分中一样;但它不能轻松处理您拥有的嵌套析取。我想到了两种方法。
更多不相交的网格:
_parameters=[
'mdl': [DecisionTreeClassifier(random_state=42)],
'mdl__max_depth': np.linspace(2,30,2),
'mdl__min_samples_split': np.linspace(1,10,1),
'mdl__max_features': np.linspace(1,100,1),
'mdl__ccp_alpha': np.linspace(0,1,10),
,
'mdl': [AdaBoostClassifier(random_state=23)],
'mdl__learning_rate': np.linspace(0,1,20),
'mdl__base_estimator': [SVC()],
,
'mdl': [AdaBoostClassifier(random_state=23)],
'mdl__learning_rate': np.linspace(0,1,20),
'mdl__base_estimator': [DecisionTreeClassifier()],
'mdl__base_estimator__ccp_alpha': [0.3,0.4,0.5,0.7],
,
]
或列表理解:
_parameters=[
'mdl': [DecisionTreeClassifier(random_state=42)],
'mdl__max_depth': np.linspace(2,30,2),
'mdl__min_samples_split': np.linspace(1,10,1),
'mdl__max_features': np.linspace(1,100,1),
'mdl__ccp_alpha': np.linspace(0,1,10),
,
'mdl': [AdaBoostClassifier(random_state=23)],
'mdl__learning_rate': np.linspace(0,1,20),
'mdl__base_estimator': [SVC()] + [DecisionTreeClassifier(ccp_alpha=a) for a in [0.3,0.4,0.5,0.7]],
,
]
【讨论】:
以上是关于如何将不同的值传递给管道参数的主要内容,如果未能解决你的问题,请参考以下文章
如何在 GitLab CI 的管道中将变量的值从一个作业传递到下一个作业?