“noise(噪声)” 一词,由一个 RBF 内核贡献组成,它将解释相关的噪声分量,如局部天气现象以及 WhiteKernel 对白噪声的贡献。 相对幅度和RBF的长度尺度是进一步的自由参数。
在减去目标平均值后最大化对数边际似然产生下列内核,其中LML为-83.214:
34.4 **2 * RBF(length_scale=41.8 ) + 3.27 **2 * RBF(length_scale=180 ) * ExpSineSquared(length_scale=1.44 , periodicity=1 ) + 0.446 **2 * RationalQuadratic(alpha=17.7 , length_scale=0.957 ) + 0.197 **2 * RBF(length_scale=0.138 ) + WhiteKernel(noise_level=0.0336 )
因此,大多数目标信号(34.4ppm)由长期上升趋势(长度为41.8年)解释。 周期分量的振幅为3.27ppm,衰减时间为180年,长度为1.44。 长时间的衰变时间表明我们在当地非常接近周期性的季节性成分。 相关噪声的幅度为0.197ppm,长度为0.138年,白噪声贡献为0.197ppm。 因此,整体噪声水平非常小,表明该模型可以很好地解释数据。 该图还显示,该模型直到2015年左右才能做出置信度比较高的预测
GaussianProcessClassifier
将高斯过程(GP)用于分类,更具体地说,用于概率分类,其中测试预测采用类概率的形式。高斯过程分类器将GP放在一个隐函数
上,然后通过一个链接函数来获得概率分类。隐函数
是一种所谓的干扰函数( nuisance function),它的值是不被观察到的,并且它们本身并不相关。其目的是为了方便地制定模型,并在预测过程中删除(整合)
。GaussianProcessClassfier实现了逻辑链函数,它不能解析地计算积分,但在二进制情况下很容易逼近。
与回归设置相反,即使设置了高斯过程先验,隐函数
的后验也不符合高斯分布, 因为高斯似然不适用于离散类标签。相反,使用的是与逻辑链接函数对应的非高斯似然。 GaussianProcessClassifier 通过拉普拉斯近似(Laplace approximation)来估计非高斯后验分布。 更多详细信息,请参见[RW2006]的第 3 章。
GP先验平均值假定为零。先验的协方差是通过传递
kernel
对象来指定的。 在通过最大化基于传递的对数边际似然(LML)的 GaussianProcessRegressor 拟合期间, 优化内核的超参数
optimizer
。由于LML可能具有多个局部最优值, 所以优化器可以通过指定
n_restarts_optimizer
进行重复。 第一次运行始终从内核的初始超参数值开始执行; 从已经从允许值的范围中随机选择超参数值来进行后续运行。 如果初始超参数需要保持固定,
None
可以传递给优化器。
GaussianProcessClassifier
通过执行基于OvR(one-versus-rest)或 OvO(one-versus-one )策略的训练和预测来支持多类分类。 在OvR(one-versus-rest)策略中,每个类都配有一个二分类高斯过程分类器,该类别被训练为将该类与其余类分开。 在 “one_vs_one” 中,对于每对类拟合一个二进制高斯过程分类器,这被训练为分离这两个类。 这些二分类的预测的预测被组合成多类预测。更多详细信息,请参阅
multi-class classification
。
在高斯过程分类的情况下,”one_vs_one” 策略可能在计算上更廉价, 因为它只决涉及整个训练集的一个子集的许多问题, 而不是整个数据集的较少的问题。由于高斯过程分类与数据集的大小相互立方,这可能要快得多。 但是,请注意,”one_vs_one” 不支持预测概率估计,而只是简单的预测。 此外,请注意,
GaussianProcessClassifier
在内部还没有实现真正的多类拉普拉斯逼近, 但如上所述,在解决内部二分类任务的,基于的是使用one-versus-rest 或者 one-versus-one方法。
1.7.4.1 GPC概率预测
这个例子说明了在不同的超参数选择下,RBF核的GPC的预测概率。第一个图显示了具有任意选择的超参数和对应于最大对数边际似然(LML)的超参数的GPC的预测概率。
虽然通过优化LML选择的超参数具有相当大的LML,但根据测试数据的日志丢失情况,它们的性能稍差。 图中显示,这是因为它们在类边界上出现了类概率的急剧变化(这是好的),但是预测的概率接近于离类边界近0.5(这是不好的),这种不良影响是由GPC内部使用的拉普拉斯逼近引起的。
第二个图显示了内核的超参数的不同选择的日志边缘可能性,突出显示了在第一个图形中使用黑点的两个超参数选择。
1.7.4.2 XOR数据集上GPC的说明
此示例说明XOR数据上的GPC。比较了固定、各向同性核(
RBF
)和非固定核(
DotProduct
)。在这个特定的数据集上,
DotProduct
内核获得了更好的结果,因为类边界是线性的,并且与坐标轴重合。然而,在实践中,像
RBF
这样的固定内核往往获得更好的结果。
1.7.4.3 iris数据集上的高斯过程分类
该示例说明了用于iris数据集的二维版本上各向同性和各向异性RBF核的GPC的预测概率。 这说明了GPC对多类分类的适用性。 各向异性RBF内核通过为两个特征维度分配不同的长度尺度来获得稍高的LML(对数边际似然)。
核(也称GPs中的协方差函数)是GPs的一个重要组成部分,它决定GP的先验和后验形状。它们通过定义两个数据点的“相似性”,并结合相似的数据点应该具有相似的目标值的假设,对正在学习的函数进行编码。内核可以分为两类:固定内核,只取决于两个数据点的距离, 不依赖于它们的绝对值
, 因此它们对于输入空间中的转换是不变的;非固定的内核,取决于数据点的具体值。固定内核可以进一步细分为各向同性和各向 异性内核,其中各向同性内核不会在输入空间中旋转。有关更多细节,我们参考[RW2006]第4章。关于如何最佳组合不同内核,我们可以参考[Duv2014]。
1.7.5.1 高斯过程核API
内核
Kernel
的主要用途是计算数据点之间的GP协方差。为此,可以调用内核的方法
__call__
_。该方法既可用于计算二维数组X中所有成对数据点的“自协方差”,也可用于计算二维数组X与二维数组Y中的成对数据点的所有组合的“交叉协方差”。以下恒等式适用于所有内核k(
WhiteKernel
除外):
k(X) == K(X, Y=X)
如果只使用自协方差的对角线,则可以调用内核的
diag()
方法,这比对_
__call__
:
np.diag(k(X, X)) == k.diag(X)
的等效调用计算效率更高。
核由超参数的向量
θ
参数化。例如,这些超参数可以控制内核的长度、尺度或周期(见下文)。所有内核都支持计算内核相对于
θ
的自协方差的分析梯度,方法是在
__call__
方法中设置
eval_gradient=True
。这一梯度被高斯过程(包括回归者和分类器)用于计算对数边际似然的梯度,而后者又被用来确定
θ
的值,该值通过梯度上升来最大化对数边际似然。对于每个超参数,在创建内核实例时需要指定初始值和边界。可以通过内核对象的属性
theta
获取和设置
θ
的当前值。此外,可以通过内核的
bounds
属性来访问超参数的边界。请注意,这两个属性(theta 和 bounds)都返回内部使用的值的对数转换值,因为这些值通常更适合基于梯度的优化。每个超参数的规范以
Hyperparameter
实例的形式存储在各自的内核中。请注意,使用名称为“x”的超参数的内核必须具有属性sel.x和self.x_bounds。
所有内核的抽象基类都是
Kernel
。内核实现了与
Estimator
类似的接口,提供了
get_params()
、
set_params()
和
clone()
方法。这还允许通过元估值器(如
Pipeline
or
GridSearch
)设置内核值。注意,由于内核的嵌套结构(通过应用内核运算符,请参见下面),内核参数的名称可能变得相对复杂。通常,对于二进制核运算符,左操作数的参数以
K1__
为前缀,右操作数的参数以
K2_
为前缀。另一种方便的方法是
clone_with_theta(theta)
,它返回内核的克隆版本,但超参数设置为
theta
。一个例子进行说明:
>>> from sklearn.gaussian_process.kernels import ConstantKernel, RBF>>> kernel = ConstantKernel(constant_value=1.0 , constant_value_bounds=(0.0 , 10.0 )) * RBF(length_scale=0.5 , length_scale_bounds=(0.0 , 10.0 )) + RBF(length_scale=2.0 , length_scale_bounds=(0.0 , 10.0 ))>>> for hyperparameter in kernel.hyperparameters: print(hyperparameter) Hyperparameter(name='k1__k1__constant_value' , value_type='numeric' , bounds=array([[ 0. , 10. ]]), n_elements=1 , fixed=False ) Hyperparameter(name='k1__k2__length_scale' , value_type='numeric' , bounds=array([[ 0. , 10. ]]), n_elements=1 , fixed=False ) Hyperparameter(name='k2__length_scale' , value_type='numeric' , bounds=array([[ 0. , 10. ]]), n_elements=1 , fixed=False )>>> params = kernel.get_params()>>> for key in sorted(params): print("%s : %s" % (key, params[key])) k1 : 1 **2 * RBF(length_scale=0.5 ) k1__k1 : 1 **2 k1__k1__constant_value : 1.0 k1__k1__constant_value_bounds : (0.0 , 10.0 ) k1__k2 : RBF(length_scale=0.5 ) k1__k2__length_scale : 0.5 k1__k2__length_scale_bounds : (0.0 , 10.0 ) k2 : RBF(length_scale=2 ) k2__length_scale : 2.0 k2__length_scale_bounds : (0.0 , 10.0 )>>> print(kernel.theta) [ 0. -0.69314718 0.69314718 ]>>> print(kernel.bounds) [[ -inf 2.30258509 ] [ -inf 2.30258509 ] [ -inf 2.30258509 ]]
所有的高斯过程核都可以与
sklearn.metrics.pairwise
互操作,反之亦然:内核的子类的实例可以作为
metric
传递给
sklearn.metrics.pairwise
中的
pairwise_kernels
。此外,可以通过使用包装器类
PairwiseKernel
,可以将来自的pairwise内核函数用作GP内核。唯一的警告是,超参数的梯度不是解析的,而是数值的,所有这些核都只支持各向同性距离。参数
gamma
被认为是一个超参数,可以被优化。其他内核参数在初始化时直接设置,并保持固定。
1.7.5.2 基础核
ConstantKernel
内核可以用作
Product
内核的一部分,它可以缩放其他因素(内核)的大小,也可以作为
Sum
内核的一部分,其中它调整了高斯过程的平均值。它取决于参数
constant_value
。它的定义是:
WhiteKernel
内核的主要用例是 sum-kernel 的一部分,它解释了信号的噪声部分。调整其参数
noise_level
对应于估计其噪声水平。它的定义是:
1.7.5.3 核操作
内核运算符获取一个或两个基本内核,并将它们组合成一个新的内核。
Sum
核取两个核
和
,并通过
组合它们。
Product
内核采用两个内核
和
,并通过
组合它们。
Exponentiation
核取一个基本核和一个标量参数
,通过
组合它们,注意在核对象上重写了魔术方法_
__add__
,
__mul___
和
__pow__
,因此可以使用例如
RBF() + RBF()
作为
Sum(RBF(), RBF())
的快捷方式。
1.7.5.4 径向基函数(RBF)核
RBF
核是一个稳定的核函数。它也被称为“平方指数”核。它由一个长度尺度参数
参数来参数化,它既可以是一个标量(核的各向同性变体),也可以是一个与输入x(核的各向异性变量)相同维数的向量。内核由以下几个方面提供:
其中
,
是欧氏距离。这个核是无穷可微的,这意味着以这个核作为协方差函数的GPs具有所有阶的均方导数,因此是非常光滑的。由RBF核产生的GP的先验和后验如下图所示:
1.7.5.5 Matérn核
Matern
核是一个平稳核,是
RBF
核的推广。它有一个额外的参数
ν
,它控制结果函数的光滑性。它由一个长度尺度参数
参数来参数化,它既可以是一个标量(核的各向同性变体),也可以是一个与输入x(核的各向异性变量)相同维数的向量。该核由以下几个方面提供:
其中
,
是欧氏距离,
是修正的 Bessel 函数,
是伽马函数。随着
,Matérn核收敛于径向基函数核(RBF)。当
时,Matérn核与绝对指数核(absolute exponential kernel)相同,即,
特别地,
:
并且,
:
学习函数的流行选择不是无限可微(由径向基函数核(RBF)假设),而是至少一次(
ν
)或两次可微(
ν
)。
通过
ν
控制学习函数的光滑性的灵活性允许适应真正的底层函数关系的性质。由Matérn核产生的GP的先验和后验如下图所示:
有关Matérn内核的不同变体的更多详细信息,请参见 [RW2006],pp 84。
1.7.5.6 有理二次核
RationalQuadratic
(有理二次核)可以看作是具有不同特征长度尺度的
RBF
核的尺度混合(无限和)。它由长度尺度参数
和尺度混合参数
α
来参数化,此时只支持各向同性变量,其中
是标量。该核由下式给出:
由
RationalQuadratic
产生的GP的先验和后验如下图所示:
1.7.5.7 Exp-Sine-Squared核
ExpSineSquared
内核允许对周期性函数进行建模。它由长度尺度参数
和周期参数
来参数化.现在只有各向同性变量,其中
是标量。该核由以下几个方面提供:
由ExpSineSquared内核产生的GP的先验和后验如下图所示:
1.7.5.8 点积核
DotProduct
核是非平稳的,可以通过在线性回归的系数
上加上
,
的先验和在偏置上加上
的先验得到。
DotProduct
核不受原点坐标旋转的影响,但不是转换。它由参数
参数化。对于
,内核被称为齐次线性核,否则它是非齐次的。内核由下式给出:
DotProduct
核通常与指数结合在一起。指数为2的示例如下图所示:
1.7.5.9 参考文献
RW2006(
1
,
2
,
3
,
4
,
5
,
6
) Carl Eduard Rasmussen and Christopher K.I. Williams, “Gaussian Processes for Machine Learning”, MIT Press 2006, Link to an official complete PDF version of the book
here
.
Duv2014
David Duvenaud, “The Kernel Cookbook: Advice on Covariance functions”, 2014,
Link
.