基类: AbstractAcquisitionFunction
使用用户定义的最优值先验对采集函数进行加权。
更多详情请参阅 Carl Hvarfner 等人的论文《piBO: Augmenting Acquisition Functions with User Beliefs for Bayesian Optimization》 [HSSL22]。
参数
decay_beta: float 用户先验的衰减因子。decay_beta 的一个可靠默认值(基于经验)是 scenario.n_trials
/ 10。prior_floor : float, 默认为 1e-12 先验的最低可能值,以确保搜索空间中所有值都非负。discretize : bool, 默认为 False 是否对连续参数的密度进行离散化(分箱)。对于随机森林模型和连续超参数触发,以避免病态情况(随机森林替代模型需要分段常数采集函数才能表现良好)。discrete_bins_factor : float, 默认为 10.0 如果进行离散化,每个参数允许的箱数倍数。
源代码位于 smac/acquisition/function/prior_acquisition_function.py
| def __init__(
self,
acquisition_function: AbstractAcquisitionFunction,
decay_beta: float,
prior_floor: float = 1e-12,
discretize: bool = False,
discrete_bins_factor: float = 10.0,
):
super().__init__()
self._acquisition_function: AbstractAcquisitionFunction = acquisition_function
self._functions: list[AbstractAcquisitionFunction] = []
self._eta: float | None = None
self._hyperparameters: dict[Any, Configuration] | None = None
self._decay_beta = decay_beta
self._prior_floor = prior_floor
self._discretize = discretize
self._discrete_bins_factor = discrete_bins_factor
# check if the acquisition function is LCB or TS - then the acquisition function values
# need to be rescaled to assure positiveness & correct magnitude
if isinstance(self._acquisition_function, IntegratedAcquisitionFunction):
acquisition_type = self._acquisition_function._acquisition_function
else:
acquisition_type = self._acquisition_function
self._rescale = isinstance(acquisition_type, (LCB, TS))
# Variables needed to adapt the weighting of the prior
self._initial_design_size = None
self._iteration_number = 0
|
__call__
__call__(configurations: list[Configuration]) -> ndarray
计算给定配置的采集值。
参数
configurations : list[Configuration] 应评估采集函数的配置。
返回值
np.ndarray [N, 1] X 的采集值
源代码位于 smac/acquisition/function/abstract_acquisition_function.py
| def __call__(self, configurations: list[Configuration]) -> np.ndarray:
"""Compute the acquisition value for a given configuration.
Parameters
----------
configurations : list[Configuration]
The configurations where the acquisition function should be evaluated.
Returns
-------
np.ndarray [N, 1]
Acquisition values for X
"""
X = convert_configurations_to_array(configurations)
if len(X.shape) == 1:
X = X[np.newaxis, :]
acq = self._compute(X)
if np.any(np.isnan(acq)):
idx = np.where(np.isnan(acq))[0]
acq[idx, :] = -np.finfo(float).max
return acq
|
update
更新计算所需的采集函数属性。
此方法将在模型拟合后、采集函数最大化前调用。例如,EI 使用它来更新当前的 fmin。默认实现仅更新采集函数已有的属性。
调用 _update
来更新采集函数属性。
参数
model : AbstractModel 用于拟合数据的模型。kwargs : Any 更新特定采集函数的额外参数。
源代码位于 smac/acquisition/function/abstract_acquisition_function.py
| def update(self, model: AbstractModel, **kwargs: Any) -> None:
"""Update the acquisition function attributes required for calculation.
This method will be called after fitting the model, but before maximizing the acquisition
function. As an examples, EI uses it to update the current fmin. The default implementation only updates the
attributes of the acquisition function which are already present.
Calls `_update` to update the acquisition function attributes.
Parameters
----------
model : AbstractModel
The model which was used to fit the data.
kwargs : Any
Additional arguments to update the specific acquisition function.
"""
self.model = model
self._update(**kwargs)
|