我在pipeline中定义了一个模型的超参数,并且算法在执行时可能会使用GridsearchCV,如果确实使用了GridsearchCV,那么之前在pipeline中定义的超参数会发生什么?
Pipeline
pipe_nusvc = Pipeline([('clfnu', NuSVC(nu=0.5,kernel='rbf'))])
我可以添加参数使用
pipe_nusvc['clfnu'].cache_size=300
我考虑过如果使用GridsearchCV时,从pipeline中移除已添加的cache_size
如果使用GridsearchCV,pipeline中定义的cache_size=300仍然会存在,并且在运行过程中没有办法移除它,那么如果在pipeline和GridsearchCV中定义了相同的超参数会发生什么?
回答:
你不能“移除”cache_size
;它是NuSVC
对象的一个参数。你可以将其重置为默认值,但200已经是默认值了。
如果你为一个参数设置了一个值(无论是在初始化时,使用set_params
,还是像你写的那样手动设置),那么这个值就会覆盖默认值,并且会一直保持这个状态,直到你再次更改它。
sklearn
有一个名为“clone”的工具:它会返回一个相同类型的新的估计器,具有相同的参数设置,但没有拟合/学习的属性。
在网格搜索中,估计器(在本例中是pipeline)会被克隆,每个克隆体会被分配一种参数组合(覆盖你之前可能设置的任何东西)。所以如果你在pipeline的定义中设置了cache_size
,或者像你的代码中那样稍后设置,但你在网格搜索中也设置了cache_size
,那么只有网格中的值才重要。原始的pipeline,在网格搜索之外,会独立存在并保留你设置的cache_size
,但搜索的cv_results_
和best_estimator_
不会如此。另一方面,如果你的参数网格中没有cache_size
,那么之前设置的任何值都会在搜索的每一个参数组合中使用。