python-3.x - 对离散网格点使用贝叶斯优化
问题描述
我正在使用BayesianOptimization包来优化sklearn 决策树的超参数。有连续的参数,如
区间中的 min_weight_fraction_leaf (0.1,0.4)
还有离散参数,如
标准 = "mse","friedman_mse",...
或 None 和 int 的组合,如
最大深度 = 无,1,2,...
def DT_optimizer_function(criterion,max_depth,min_weight_fraction_leaf):
"""
Function with unknown internals we wish to maximize.
"""
return -x ** 2 - (y - 1) ** 2 + 1
from bayes_opt import BayesianOptimization
# Bounded region of parameter space
pbounds = {'criterion': ?,
'max_depth': ?,
'min_weight_fraction_leaf' = (0.1,0.4)
}
optimizer = BayesianOptimization(
f=DT_optimizer_function,
pbounds=pbounds,
random_state=1,
)
optimizer.maximize(
init_points=2,
n_iter=3,
)
print(optimizer.max)
是否也可以优化离散值?
解决方案
根据他们的文档
没有使用此包处理离散参数的原则方法。
但是,您可以将来自bayes opt 的浮点样本转换为int
或以符合您的目的的方式对其进行处理。例如,在上面的代码段中,您可以执行以下操作:
from bayes_opt import BayesianOptimization
def function_to_be_optimized(criterion,max_depth):
# map bayes_opt sample to a categorical value
# values below 0.5 mapped to 'mse', above 0.5 mapped to 'friedman_mse'
criterion_list = ['mse', 'friedman_mse']
criterion = criterion_list[round(criterion)]
# map bayes_opt sample to an integer value
max_depth = int(max_depth)
max_depth = max_depth if max_depth!=0 else None
magical_number = ...
return magical_number
pbounds = {
'criterion': (0,1),
'max_depth': (0,5)
}
optimizer = BayesianOptimization(
f=function_to_be_optimized,
pbounds=pbounds,
random_state=42,
)
optimizer.maximize(
init_points=2,
n_iter=3,
)
我知道这不是一个理想的解决方案,因为分类值可能无法享受实值参数所具有的平滑度特性。
推荐阅读
- c++ - SDL C++ 将二维数组绘制成四边形
- struts2-jquery-grid - ParamQuery ColModel 未正确显示
- python - 在python中解析jsonld
- firebase - 大型 Firebase 托管部署错误,身份验证令牌已过期
- php - 无法为 laravel 安装 voyager
- angular - 访问 GAE 部署的 Angular 应用程序
- php - PHP 和 MYSQLi 按今天最流行的项目排序?
- scala - UserDefinedAggregateFunction merge() 缓冲区始终未填充
- intellij-idea - Google IntelliJ java 样式:将 2 空格缩进更改为 4 空格缩进
- python - 如何计算python中数组的每个值