# 1.7. 高斯过程
校验者:
[@glassy](https://github.com/apachecn/scikit-learn-doc-zh)
[@Trembleguy](https://github.com/apachecn/scikit-learn-doc-zh)
翻译者:
[@AI追寻者](https://github.com/apachecn/scikit-learn-doc-zh)
**高斯过程 (GP)** 是一种常用的监督学习方法,旨在解决\*回归问题\*和\*概率分类问题\*。
高斯过程模型的优点如下:
> - 预测内插了观察结果(至少对于正则核)。
> - 预测结果是概率形式的(高斯形式的)。这样的话,人们可以计算得到经验置信区间并且据此来判断是否需要修改(在线拟合,自适应)
>
> 在一些区域的预测值。
> - 通用性: 可以指定不同的:ref:内核(kernels)。虽然该函数提供了常用的内核,但是也可以指定自定义内核。
高斯过程模型的缺点包括:
> - 它们不稀疏,例如,模型通常使用整个样本/特征信息来进行预测。
> - 高维空间模型会失效,高维也就是指特征的数量超过几十个。
## 1.7.1. 高斯过程回归(GPR)
[`GaussianProcessRegressor`](generated/sklearn.gaussian_process.GaussianProcessRegressor.html#sklearn.gaussian_process.GaussianProcessRegressor "sklearn.gaussian_process.GaussianProcessRegressor") 类实现了回归情况下的高斯过程(GP)模型。 为此,需要实现指定GP的先验。当参数 `normalize_y=False` 时,先验的均值 通常假定为常数或者零; 当 `normalize_y=True` 时,先验均值通常为训练数 据的均值。而先验的方差通过传递 [内核(kernel)](#gp-kernels) 对象来指定。通过 最大化基于传递 `optimizer` 的对数边缘似然估计(LML),内核的超参可以在 GaussianProcessRegressor 类执行拟合过程中被优化。由于 LML 可能会存在多个 局部最优解,因此优化过程可以通过指定 `n_restarts_optimizer` 参数进行 多次重复。通过设置内核的超参初始值来进行第一次优化的运行。后续的运行 过程中超参值都是从合理范围值中随机选取的。如果需要保持初始化超参值, 那么需要把优化器设置为 None 。
目标变量中的噪声级别通过参数 `alpha` 来传递并指定,要么全局是常数要么是一个数据点。 请注意,适度的噪声水平也可以有助于处理拟合期间的数字问题,因为它被有效地实现为吉洪诺夫正则化(Tikhonov regularization), 即通过将其添加到核心矩阵的对角线。明确指定噪声水平的替代方法是将 WhiteKernel 组件包含在内核中, 这可以从数据中估计全局噪声水平(见下面的示例)。
算法实现是基于 [\[RW2006\]](#rw2006) 中的算法 2.1 。除了标准 scikit learn 估计器的 API 之外, GaussianProcessRegressor 的作用还包括:
- 允许预测,无需事先拟合(基于GP先验)
- 提供了一种额外的方法 `sample_y(X)` , 其评估 在给定输入处从 GPR (先验或后验)绘制的样本
- 公开了一种方法 `log_marginal_likelihood(theta)` , 可以在外部使用其他方式选择超参数,例如通过马尔科夫链蒙特卡罗链(Markov chain Monte Carlo)。
## 1.7.2. GPR 示例
### 1.7.2.1. 具有噪声级的 GPR 估计
该示例说明具有包含 WhiteKernel 的和核(sum-kernel)的 GPR 可以估计数据的噪声水平。 对数边缘似然(LML)景观的图示表明存在 LML 的两个局部最大值。
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_gpr_noisy_0001.png](https://box.kancloud.cn/695d8ea63edf9377fdd3d55abf4ee2eb_566x424.jpg)](../auto_examples/gaussian_process/plot_gpr_noisy.html)
第一个对应于具有高噪声电平和大长度尺度的模型,其解释数据中噪声的所有变化。
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_gpr_noisy_0011.png](https://box.kancloud.cn/aa61026e4b0df0e1c06c84532e7d7f24_566x424.jpg)](../auto_examples/gaussian_process/plot_gpr_noisy.html)
第二个具有较小的噪声水平和较短的长度尺度,这解释了无噪声功能关系的大部分变化。 第二种模式有较高的可能性; 然而,根据超参数的初始值,基于梯度的优化也可能会收敛到高噪声解。 因此,对于不同的初始化,重复优化多次是很重要的。
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_gpr_noisy_0021.png](https://box.kancloud.cn/4bdec813cea27e237d387f6a765c637c_566x424.jpg)](../auto_examples/gaussian_process/plot_gpr_noisy.html)
### 1.7.2.2. GPR 和内核岭回归(Kernel Ridge Regression)的比较
内核脊回归(KRR)和 GPR 通过内部使用 “kernel trick(内核技巧)” 来学习目标函数。 KRR学习由相应内核引起的空间中的线性函数,该空间对应于原始空间中的非线性函数。 基于平均误差损失与脊正弦化,选择内核空间中的线性函数。 GPR使用内核来定义先验分布在目标函数上的协方差,并使用观察到的训练数据来定义似然函数。 基于贝叶斯定理,定义了目标函数上的(高斯)后验分布,其平均值用于预测。
一个主要区别是,GPR 可以基于边际似然函数上的梯度上升选择内核的超参数, 而KRR需要在交叉验证的损失函数(均方误差损失)上执行网格搜索。 另一个区别是,GPR 学习目标函数的生成概率模型,因此可以提供有意义的置信区间和后验样本以及预测值, 而KRR仅提供预测。
下图说明了人造数据集上的两种方法,其中包括正弦目标函数和强噪声。 该图比较了基于 ExpSineSquared 内核的 KRR 和 GPR 的学习模型,适用于学习周期函数。 内核的超参数控制内核的平滑度(length\_scale)和周期性(周期性)。 此外,数据的噪声水平由 GPR 通过内核中的另外的 WhiteKernel 组件和 KRR 的正则化参数 α 明确地学习。
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_compare_gpr_krr_0011.png](https://box.kancloud.cn/6ebbc1fdc379aef0475da2149d6c907d_566x283.jpg)](../auto_examples/gaussian_process/plot_compare_gpr_krr.html)
该图显示,两种方法都可以学习合理的目标函数模型。 GPR将函数的周期正确地识别为 ![2*\pi](https://box.kancloud.cn/2c363a6cdae5530c96373acbc3e3fafa_37x12.jpg) (6.28),而 KRR 选择倍增的周期为 ![4*\pi](https://box.kancloud.cn/c2ae37b9ce0625803ec0972be483838a_37x13.jpg) 。 此外,GPR 为 KRR 不可用的预测提供了合理的置信区间。 两种方法之间的主要区别是拟合和预测所需的时间: 原则上KRR的拟合速度较快,超参数优化的网格搜索与超参数( “curse of dimensionality(维度诅咒)” )呈指数级关系。 GPR中的参数的基于梯度的优化不受此指数缩放的影响,因此在具有三维超参数空间的该示例上相当快。 预测的时间是相似的; 然而,生成 GPR 预测分布的方差需要的时间比生成平均值要长。
### 1.7.2.3. Mauna Loa CO2 数据中的 GRR
该示例基于 \[RW2006\] 的第 5.4.3 节。 它演示了使用梯度上升的对数边缘似然性的复杂内核工程和超参数优化的示例。 数据包括在 1958 年至 1997 年间夏威夷 Mauna Loa 天文台收集的每月平均大气二氧 化碳浓度(以百万分之几(ppmv)计)。目的是将二氧化碳浓度建模为时间t的函数。
内核由几个术语组成,负责说明信号的不同属性:
- 一个长期的,顺利的上升趋势是由一个 RBF 内核来解释的。 具有较大长度尺寸的RBF内核将使该分量平滑; 没有强制这种趋势正在上升,这给 GP 带来了这个选择。 具体的长度尺度和振幅是自由的超参数。
- 季节性因素,由定期的 ExpSineSquared 内核解释,固定周期为1年。 该周期分量的长度尺度控制其平滑度是一个自由参数。 为了使准确周期性的衰减,采用带有RBF内核的产品。 该RBF组件的长度尺寸控制衰减时间,并且是另一个自由参数。
- 较小的中期不规则性将由 RationalQuadratic 内核组件来解释, RationalQuadratic 内核组件的长度尺度和 alpha 参数决定长度尺度的扩散性。 根据 \[RW2006\] ,这些不规则性可以更好地由 RationalQuadratic 来解释, 而不是 RBF 内核组件,这可能是因为它可以容纳几个长度尺度。
- “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年左右才能做出置信度比较高的预测
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_gpr_co2_0011.png](https://box.kancloud.cn/e8911edd79d1728c3ebfa40678984951_566x424.jpg)](../auto_examples/gaussian_process/plot_gpr_co2.html)
## 1.7.3. 高斯过程分类(GPC)
所述 [`GaussianProcessClassifier`](generated/sklearn.gaussian_process.GaussianProcessClassifier.html#sklearn.gaussian_process.GaussianProcessClassifier "sklearn.gaussian_process.GaussianProcessClassifier") 器实现了用于分类目的的高斯过程(GP),当测试的预测采用类概率的形式,更能够用于概率分类。 GaussianProcessClassifier 在隐函数 ![f](https://box.kancloud.cn/dcb1a3a7399905bf1e93d510c0e618e5_10x16.jpg) 之前设置GP先验,然后通过链接函数进行压缩以获得概率分类。 隐函数 ![f](https://box.kancloud.cn/dcb1a3a7399905bf