平方指数或RBF核的基本方程如下:
这里 l 是长度尺度,sigma 是方差参数。长度比例控制两个点的相似程度,因为它只是放大 x 和 x' 之间的距离。方差参数控制函数的平滑程度。
我想用我的训练数据集优化/训练这些参数(l 和 sigma)。我的训练数据集采用以下形式:
X:二维笛卡尔坐标作为输入数据
y:Wi-Fi 设备在二维坐标点处的无线电信号强度 (RSS) 作为观测输出
根据sklearn http://scikit-learn.org/stable/modules/generated/sklearn.gaussian_process.GaussianProcessRegressor.html#sklearn.gaussian_process.GaussianProcessRegressor.get_params,GaussianProcessRegressor 类定义为:
class sklearn.gaussian_process.GaussianProcessRegressor(kernel=None, alpha=1e-10, optimizer=’fmin_l_bfgs_b’, n_restarts_optimizer=0, normalize_y=False, copy_X_train=True, random_state=None)
在这里,optimizer
是一个字符串或可使用 L-BFGS-B 算法作为默认优化算法调用(“fmin_l_bfgs_b”
). The optimizer
可以是内部支持的优化器之一,用于优化内核参数(由字符串指定),也可以是作为可调用传递的外部定义的优化器。此外,scikit-learn 中唯一可用的内部优化器是fmin_l_bfgs_b
。然而,我了解到scipy 包 https://docs.scipy.org/doc/scipy/reference/optimize.html有更多的优化器。因为我想用信赖域反射算法 https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.optimize.least_squares.html#scipy.optimize.least_squares为了优化超参数,我尝试实现如下算法:
def fun_rosenbrock(Xvariable):
return np.array([10*(Xvariable[1]-Xvariable[0]**2),(1-Xvariable[0])])
Xvariable = [1.0,1.0]
kernel = C(1.0, (1e-5, 1e5)) * RBF(1, (1e-1, 1e3))
trust_region_method = least_squares(fun_rosenbrock,[10,20,30,40,50],bounds=[0,100], method ='trf')
gp = GaussianProcessRegressor(kernel=kernel, optimizer = trust_region_method, alpha =1.2, n_restarts_optimizer=10)
gp.fit(X, y)
由于我无法弄清楚参数“fun”在我的例子中实际上是什么,我求助于使用rosenbrock函数this https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.optimize.least_squares.html#scipy.optimize.least_squares示例(示例位于页面底部)。我在控制台中收到以下错误。
我的使用方法是scipy 包优化内核参数正确吗?如何打印参数的优化值?参数“fun”是什么scipy.optimize.least_squares https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.optimize.least_squares.html#scipy.optimize.least_squares就我而言?
谢谢你!