调用gp_minimize函数遇TypeError:predict()获意外参数'return_mean_grad'
问题解决:gp_minimize调用时出现TypeError: predict() got an unexpected keyword argument 'return_mean_grad'
问题描述
调用gp_minimize时触发错误:
TypeError: predict() got an unexpected keyword argument 'return_mean_grad'
当前使用的库版本:
- scikit-optimize 0.9.0
- scikit-learn 1.2.0
示例代码:
from sklearn.gaussian_process import GaussianProcessRegressor from sklearn.gaussian_process.kernels import Matern from skopt import gp_minimize # 定义高斯过程核函数 kernel = Matern(nu=2.5) # 初始化高斯过程回归器 gpr = GaussianProcessRegressor(kernel=kernel, n_restarts_optimizer=10) # 定义目标函数 def f(x): x1, x2, x3 = x return -x1**2 - x2**2 - x3**2 # 定义变量范围 bounds = [(0, 1), (0, 1), (0, 1)] # 执行优化 res = gp_minimize(f, bounds, n_calls=20, random_state=0, verbose=True, n_random_starts=10, acq_func="EI", base_estimator=gpr) # 打印最优结果 print("x1 = {:.4f}, x2 = {:.4f}, x3 = {:.4f}, f(x) = {:.4f}".format(res.x[0], res.x[1], res.x[2], res.fun))
问题原因
scikit-learn 1.2.0 对GaussianProcessRegressor的predict方法进行了更新,移除了return_mean_grad参数;但scikit-optimize 0.9.0的代码逻辑中仍在调用该参数,导致版本兼容冲突。
解决方法
方法1:降级scikit-learn版本
将scikit-learn降级到1.1.x系列(如1.1.3),该版本的predict方法仍保留return_mean_grad参数,可与scikit-optimize 0.9.0兼容:
pip install scikit-learn==1.1.3
方法2:升级scikit-optimize到兼容版本
scikit-optimize 0.10.0及以上版本已修复该兼容问题,直接升级到最新稳定版即可:
pip install --upgrade scikit-optimize
方法3:不自定义base_estimator
若无需自定义高斯过程回归器,可直接使用gp_minimize内置的默认估计器,它会自动适配当前scikit-learn版本。修改代码时移除base_estimator=gpr参数:
res = gp_minimize(f, bounds, n_calls=20, random_state=0, verbose=True, n_random_starts=10, acq_func="EI")
内容的提问来源于stack exchange,提问作者Evan Camilleri
相关产品推荐
相关产品推荐

