首页 > 解决方案 > 将 0 添加到 BayesSearchCV 中的对数均匀参数分布

问题描述

我正在使用 scikit-optimize 在我的 RandomForestClassifier 超参数空间中执行 BayesSearchCV。一个超参数也应该为 0(零),同时具有对数均匀分布:

ccp_alpha = Real(min(ccp_alpha), max(ccp_alpha), prior='log-uniform')

由于无法计算 log(0),显然不可能让参数在某些时候取值为 0。

因此,引发以下错误:

ValueError: Not all points are within the bounds of the space.

有没有办法解决这个问题?

标签: pythonscikit-learnscikit-optimizebayessearchcv

解决方案


请注意,从对数均匀分布中获得 0 的定义并不明确。你将如何规范这个分布,或者换句话说,得出 0 的几率是多少?

最简单的方法是生成一个值列表以尝试使用指定的分布。由于此列表中的值将被统一采样,因此您可以使用任何您喜欢的分布。例如列表

reals = [0,0,0,0,x1,x2,x3,x4] 

如果 x1 到 x4 是对数均匀分布的,则您抽到 0 的几率是 4 / 8,抽到对数均匀分布值的几率是 4 / 8。

如果你真的想要,你还可以实现一个名为 MyReal 的类(可能是 Real 的子类),它实现了一个 rvs 方法,可以产生你想要的分布。


推荐阅读