GPyOpt 获得最优 X 的成本方差
GPyOpt get cost variance for optimum X
我已经使用 GPyOpt 优化了一个多维模型
opt = BayesianOptimization(f=my_eval_func, domain=domain, constraints=constraints)
opt.run_optimization(max_iter=20)
这样做之后,我用 opt.x_opt
检索了最佳坐标,用 opt.fx_opt
检索了模型成本。但是,我也对这个最佳位置的 fx
的方差感兴趣。我该如何实现?
我通过将内部 GP 模型应用于优化的 x_opt
变量,即 m.model.predict(m.x_opt)
,自己解决了这个问题。但是,我认为结果是在一些归一化和偏移坐标 space 中,需要对预期结果进行线性变换,例如:
def get_opt_est(m):
X = []
pred_X = []
for x,y in zip(m.X, m.Y):
X.append(y[0])
pred_X.append(m.model.predict(x)[0][0])
scale = (np.max(X) - np.min(X))/(np.max(pred_X) - np.min(pred_X))
offset = np.min(X) - np.min(pred_X)*scale
pred = m.model.predict(m.x_opt)
return(pred[0][0]*scale+offset,pred[1][0]*scale)
print("Predicted loss and variance is",get_opt_est(opt))
我已经使用 GPyOpt 优化了一个多维模型
opt = BayesianOptimization(f=my_eval_func, domain=domain, constraints=constraints)
opt.run_optimization(max_iter=20)
这样做之后,我用 opt.x_opt
检索了最佳坐标,用 opt.fx_opt
检索了模型成本。但是,我也对这个最佳位置的 fx
的方差感兴趣。我该如何实现?
我通过将内部 GP 模型应用于优化的 x_opt
变量,即 m.model.predict(m.x_opt)
,自己解决了这个问题。但是,我认为结果是在一些归一化和偏移坐标 space 中,需要对预期结果进行线性变换,例如:
def get_opt_est(m):
X = []
pred_X = []
for x,y in zip(m.X, m.Y):
X.append(y[0])
pred_X.append(m.model.predict(x)[0][0])
scale = (np.max(X) - np.min(X))/(np.max(pred_X) - np.min(pred_X))
offset = np.min(X) - np.min(pred_X)*scale
pred = m.model.predict(m.x_opt)
return(pred[0][0]*scale+offset,pred[1][0]*scale)
print("Predicted loss and variance is",get_opt_est(opt))