我在进行超参数调优,使用scikit-optimize
进行贝叶斯优化,并使用RandomizedSearchCV
进行随机搜索。
在sci-kit optimize中,我可以轻松地这样定义learning_rate
:
space= [Real(10**-5, 10**0, "log-uniform", name='learning_rate'), Integer(1, 20, name='max_depth'), ... ]
我想知道如何在RandomizedSearchCV
(sklearn)中实现同样的“列表”值用于优化?
params_randomSearch = { "learning_rate" : TODO, "min_samples_leaf": np.arange(1,30,1), .. }
回答:
param_distributions : dict
字典,键为参数名称(字符串),值为要尝试的分布或参数列表。分布必须提供rvs方法用于抽样(如scipy.stats.distributions中的那些)。如果给定的是列表,则会均匀抽样。
现在,scikit-optimize中的Real
和Integer
已经实现了rvs()
方法,因此你可以直接使用它们。只需在要用于RandomizedSearchCV的字典中分配它们即可。
params_randomSearch = { "learning_rate" : Real(10**-5, 10**0, "log-uniform", name='learning_rate'), "min_samples_leaf": np.arange(1,30,1), .. }