在Pipeline与GridsearchCV中定义同一超参数会发生什么?
Pipeline与GridSearchCV的超参数优先级规则
- 当同一超参数同时在Pipeline(包括初始化定义、后续赋值)和GridSearchCV的
param_grid中定义时,param_grid中配置的参数优先级更高,会完全覆盖Pipeline中的原有值参与搜索。
未加入param_grid的参数的行为
所有没有在param_grid中声明的超参数,都会默认沿用你在Pipeline中设置的取值,整个GridSearchCV运行过程中不会被修改:
- 你示例中初始化Pipeline时定义的
nu=0.5、kernel='rbf',以及后续赋值的cache_size=300,只要没有写到param_grid里,就会在所有交叉验证轮次中固定生效,不会被自动移除或改动。
已加入param_grid的参数的行为
只要参数出现在param_grid的候选列表中,不管你之前在Pipeline中给它设置了什么值,都会被param_grid中的候选值完全覆盖:
- 比如你在
param_grid中配置{'clfnu__nu': [0.1, 0.3, 0.7]},那么Pipeline初始化时设置的nu=0.5不会生效,GridSearchCV会依次用0.1、0.3、0.7三个值训练验证,完全忽略原有初始值。
小提示:在
param_grid中指定Pipeline内部步骤的参数时,需要使用步骤名__参数名的格式(双下划线连接),比如你示例中要指定clfnu步骤的cache_size参数,就要写成clfnu__cache_size。
关于无需调整的固定参数的处理
你不需要特意移除Pipeline中设置的cache_size=300:
- 如果你不需要调整这个参数,直接保留即可,它会作为固定配置在所有搜索轮次中生效,不会对搜索逻辑产生影响。
- 如果你后续需要调整这个参数,直接把
clfnu__cache_size加入param_grid给出候选值,就会自动覆盖Pipeline中设置的300。
内容的提问来源于stack exchange,提问作者Ctrl7
相关产品推荐
相关产品推荐

