问题描述
在 scikit-learn 中,GaussianProcessRegressor
model 在其参数中包含一个内核和用于其超参数的优化器。
我了解,如果优化器设置为 None
或内核的超参数设置为 'fixed'
,则它们无法更改。
scikit-learn 中 GPR 的默认内核是 ConstantKernel(1.0,constant_value_bounds="fixed") * RBF(1.0,length_scale_bounds="fixed")
。我假设常量内核在这里有一个目的,但根据我的理解,它只能是 1,因此没有任何作用。
我的问题是:默认内核和简单的 RBF(1.0,length_scale_bounds="fixed")
内核之间有什么实际区别吗?
解决方法
ConstantKernel(1.0,constant_value_bounds="fixed") * RBF(1.0,length_scale_bounds="fixed")
不是 scikit-learn 或任何其他库中的默认内核,但它被广泛使用,因此我们可以将其视为默认内核。在 GP 中,我们不将任何内核视为默认内核(来源:kernel cookbook)。
谈到你的问题,RBF核的方程如下,
part1 = sigma^2
part2 = exp(((x1-x2)^2)/l^2)
RBF(x1,x2) = part1 * part2
这里,l
是长度尺度,sigma^2
是方差超参数。其他实现如 GPy,直接将 sigma
和 l
视为内核的参数。但是,scikit-learn 选择了不同的方式。
在 sklearn 中,ConstantKernel()
正在建模 part1
,RBF()
正在建模 part2
。
因此,如果我们在两个部分都使用“固定”参数,则没有实际区别,但是如果它们是可变的,那么它们就不同了,正如我上面试图描述的那样。