如何将不同的值传递给管道参数

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]],
    ,
]

【讨论】:

以上是关于如何将不同的值传递给管道参数的主要内容,如果未能解决你的问题,请参考以下文章

尝试在其线程函数参数中将不同的值传递给 openMp 线程

如何在 GitLab CI 的管道中将变量的值从一个作业传递到下一个作业?

如何将向量中的值传递给带有多个参数的函数

如何通过控制器将两个不同模型的值作为 Laravel 8 中的单个返回变量传递给视图文件

VB中过程调用时有几种参数传递方式,说明其区别

为啥将“switch”类型参数的值传递给字符串参数?