页面树结构

2017-11-09 ApacheCN 开源组织,第二期邀请成员活动,一起走的更远 : http://www.apachecn.org/member/209.html


MachineLearning 优酷地址 : http://i.youku.com/apachecn

转至元数据结尾
转至元数据起始

高斯过程(GP)是一种通用的监督学习方法,旨在解决回归概率分类问题。

高斯过程的优点是:

  • 预测内插了观察结果(至少对于正则核)。
  • 预测是概率(Gaussian),所以人们可以计算经验置信区间,并根据那些应该在某些兴趣区域改编(在线拟合,自适应)预测的那些来确定。
  • 通用性:可以指定不同的内核。提供通用内核,但也可以指定自定义内核。

高斯过程的缺点包括:

  • 它们不稀疏,即他们使用整个样本/特征信息来执行预测。
  • 它们在高维空间中失去效率 - 即当功能数量超过几十个时。
 

高斯过程回归(GPR)

GaussianProcessRegressor工具高斯过程(GP)回归的目的。为此,需要指定GP的先前。假设先前的均值为常数,零(normalize_y=False或)训练数据的平均值(for normalize_y=True)。先前的协方差是通过传递内核对象来指定的。在通过最大化基于传递的对数边缘似然(LML)的GaussianProcessRegressor拟合期间,优化内核的超参数optimizer。由于LML可能具有多个局部最优值,所以优化器可以通过指定重复启动n_restarts_optimizer。第一次运行始终从内核的初始超参数值开始执行; 从已经从允许值的范围中随机选择的超参数值进行后续运行。

可以通过参数传递目标中的噪声级别alpha,全局为标量或每数据点。请注意,适度的噪声水平也可以有助于处理拟合期间的数字问题,因为它被有效地实现为Tikhonov正则化,即通过将其添加到核心矩阵的对角线。明确指定噪声水平的替代方法是将WhiteKernel组件包含在内核中,这可以从数据中估计全局噪声电平(见下面的示例)。

实现基于[RW2006]的算法2.1。除了标准scikit学习估计器的API之外,GaussianProcessRegressor:

  • 允许预测,无需事先拟合(基于GP之前)
  • 提供了一种额外的方法sample_y(X),其评估在给定输入处从GPR(先验或后验)绘制的样本
  • 公开了一种方法log_marginal_likelihood(theta),可以在外部使用其他方式选择超参数,例如通过马尔科夫链蒙特卡罗链。

 

GPR示例

具有噪声级估计的

该示例说明具有包含WhiteKernel的和核的GPR可以估计数据的噪声水平。对数边缘似然(LML)景观的图示表明存在LML的两个局部最大值。

第一个对应于具有高噪声电平和大长度尺度的模型,其解释数据中噪声的所有变化。

第二个具有较小的噪声水平和较短的长度尺度,这解释了无噪声功能关系的大部分变化。第二种模式有较高的可能性; 然而,根据超参数的初始值,基于梯度的优化也可能会收敛到高噪声解。因此,对于不同的初始化,重复优化多次。

GPR和内核岭回归的比较

内核脊回归(KRR)和GPR通过内部使用“内核技巧”来学习目标函数。KRR学习由相应内核引起的空间中的线性函数,该空间对应于原始空间中的非线性函数。基于平均误差损失与脊正弦化,选择内核空间中的线性函数。GPR使用内核来定义先验分布在目标函数上的协方差,并使用观察到的训练数据来定义似然函数。基于贝叶斯定理,定义了目标函数上的(高斯)后验分布,其平均值用于预测。

一个主要区别是,GPR可以基于边际似然函数上的梯度上升选择内核的超参数,而KRR需要在交叉验证的损失函数(均方误差损失)上执行网格搜索。另一个区别是,GPR学习目标函数的生成概率模型,因此可以提供有意义的置信区间和后验样本以及预测值,而KRR仅提供预测。

下图说明了人造数据集上的两种方法,其中包括正弦目标函数和强噪声。该图比较了基于ExpSineSquared内核的KRR和GPR的学习模型,适用于学习周期函数。内核的超参数控制内核的平滑度(length_scale)和周期性(周期性)。此外,数据的噪声水平由GPR通过内核中的另外的WhiteKernel组件和KRR的正则化参数α明确地学习。

该图显示,两种方法都可以学习合理的目标函数模型。GPR将功能的周期性正确地识别为(6.28),而KRR选择倍增的周期 。此外,GPR为KRR不可用的预测提供了合理的置信区间。两种方法之间的主要区别是拟合和预测所需的时间:原则上KRR的拟合速度较快,超参数优化的网格搜索与超参数(“维度诅咒”)呈指数级关系。GPR中的参数的基于梯度的优化不受此指数缩放的影响,因此在具有三维超参数空间的该示例上相当快。预测的时间是相似的; 然而,

Mauna Loa CO2数据中的

该示例基于[RW2006]的第5.4.3节。它演示了使用梯度上升的对数边缘似然性的复杂内核工程和超参数优化的示例。数据包括在1958年至1997年间夏威夷Mauna Loa天文台收集的每月平均大气二氧化碳浓度(以百万分之几(ppmv)计)。目的是将二氧化碳浓度建模为时间t的函数。

内核由几个术语组成,负责说明信号的不同属性:

  • 一个长期的,顺利的上升趋势是由一个RBF内核来解释的。具有较大长度尺寸的RBF内核将使该组件平滑; 没有强制这种趋势正在上升,这给GP带来了这个选择。具体的长度尺度和振幅是自由的超参数。
  • 季节性因素,由定期的ExpSineSquared内核解释,固定周期为1年。该周期分量的长度尺度控制其平滑度是一个自由参数。为了使准确周期性的衰减,带有RBF内核的产品被采用。该RBF组件的长度尺寸控制衰减时间,并且是另一个自由参数。
  • 较小的中期不规则性将由RationalQuadratic内核组件来解释,RationalQuadratic内核组件的长度尺度和alpha参数决定长度尺度的扩散性。根据[RW2006],这些不规则性可以更好地由RationalQuadratic来解释,而不是RBF内核组件,这可能是因为它可以容纳几个长度尺度。
  • 一个“噪声”术语,由一个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 
                                                   周期性= 1 
+  0.446 ** 2  *  RationalQuadratic 阿尔法= 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年左右才能做出非常有信心的预测

高斯过程分类(GPC)

所述GaussianProcessClassifier器具高斯过程(GP)用于分类目的,更具体地用于概率分类,其中测试的预测采取类概率的形式。GaussianProcessClassifier将GP置于潜在函数之前F,然后通过链接函数进行压缩以获得概率分类。潜在的功能F是所谓的滋扰功能,其值没有被观察到,并且与它们本身无关。其目的是允许模型的方便配方,并F 在预测期间被去除(整合)。GaussianProcessClassifier实现了逻辑链路功能,对于该逻辑,积分不能在分析上计算,但在二进制情况下很容易近似。

与回归设置相反,F即使对于GP ,潜在函数的后验 也不是高斯,因为高斯似然不适用于离散类标签。相反,使用与逻辑链路功能(logit)对应的非高斯似然。GaussianProcessClassifier基于拉普拉斯近似近似非高斯后的高斯。有关详细信息,请参见[RW2006]的第3章。

GP先验平均值假定为零。先前的协方差是通过传递内核对象来指定的。在通过最大化基于传递的对数边缘似然(LML)的GaussianProcessRegressor拟合期间,优化内核的超参数optimizer。由于LML可能具有多个局部最优值,所以优化器可以通过指定重复启动n_restarts_optimizer。第一次运行始终从内核的初始超参数值开始执行; 从已经从允许值的范围中随机选择的超参数值进行后续运行。如果初始超参数应该保持固定,可以作为优化传递。

GaussianProcessClassifier通过执行一对一或一对一的训练和预测来支持多类分类。在一对一休息中,每个类都配有一个二进制高斯过程分类器,该类别被训练为将该类与其余类分开。在“one_vs_one”中,对于每对类拟合一个二进制高斯过程分类器,这被训练为分离这两个类。这些二进制预测因子的预测被组合成多类预测。有关详细信息,请参阅多类别分类

在高斯过程分类的情况下,“one_vs_one”可能在计算上更便宜,因为它必须解决涉及整个训练集的仅一个子集的许多问题,而不是整个数据集的较少的问题。由于高斯过程分类与数据集的大小相互立方,这可能要快得多。但是,请注意,“one_vs_one”不支持预测概率估计,而只是简单的预测。此外,请注意,GaussianProcessClassifier在内部还没有实现真正的多类Laplace近似,但如上所述,基于在内部解决几个二进制分类任务,它们使用一对一或一对一组合。

 

GPC示例

GPC的概率预测

该示例说明了对于具有不同选项的超参数的RBF内核的GPC预测概率。第一个图显示GPC具有任意选择的超参数的预测概率,并且超参数对应于最大对数边缘似然(LML)。

虽然通过优化LML选择的超参数具有相当大的LML,但是它们根据测试数据的对数损失稍微更差。该图显示,这是因为它们在阶级边界(这是好的)表现出类概率的急剧变化,但预测概率接近0.5远离类边界(这是坏的)这种不良影响是由由GPC内部使用的拉普拉斯逼近。

第二个图显示了内核超参数的不同选择的对数边缘似然,突出了第一个图中使用的超参数的两个选择的黑点。

GPC在XOR数据集上的图示

此示例说明了在XOR数据上的GPC。相对固定的,各向同性的核(RBF)和非固定的核(DotProduct)。在这个特定的数据集上,DotProduct内核获得了更好的结果,因为类边界是线性的,与坐标轴重合。然而,实际上,诸如RBF经常获得更好结果的固定内核。

虹膜数据集上的高斯过程分类(GPC)

该示例说明了用于虹膜数据集的二维版本上各向同性和各向异性RBF核的GPC的预测概率。这说明了GPC对非二进制分类的适用性。各向异性RBF内核通过为两个特征维度分配不同的长度尺度来获得稍高的对数边缘似然。

高斯过程的内核

内核(在GP的背景下也称为协方差函数)是确定GP前后形状的GP的关键组成部分。他们通过定义两个数据点的“相似性”,并结合相似的数据点应该具有相似的目标值的假设,对所学习的函数进行编码。可以区分两类内核:固定内核只取决于两个数据点的距离,而不是依赖于它们的绝对值,因此它们对于输入空间中的转换是不变的,而非固定的内核也取决于数据点的具体值。固定内核可以进一步细分为各向同性和各向异性内核,其中各向同性内核也不会在输入空间中旋转。更多细节,

高斯过程内核API 

a的主要用法Kernel是计算GP在数据点之间的协方差。为此,__call__可以调用内核的方法。该方法可以用于计算2d阵列X中所有数据点对的“自动协方差”,或二维阵列X的数据点与二维阵列Y中的数据点的所有组合的“互协方差”。以下身份对于所有内核k都是正确的(除了WhiteKernel): k(X) == K(X, Y=X)

如果仅使用自动协方差的对角线,diag() 则可以调用内核的方法,该方法比等效调用的计算效率更高__call__np.diag(k(X, X)) == k.diag(X)

内核通过超参数向量参数化。这些超参数可以例如控制内核的长度尺度或周期性(见下文)。内核的自协方差对于所有的内核支持计算解析梯度通过设置 eval_gradient=True__call__方法。高斯过程(回归和分类器)都使用这种梯度来计算对数边缘似然的梯度,后者又用于通过梯度上升来确定最大化对数边缘似然的值。对于每个超参数,在创建内核实例时需要指定初始值和边界。可以通过theta内核对象的属性获取和设置 当前值。此外,bounds超参数的范围可以通过内核的属性来访问。请注意,这两个属性(theta和bounds)都会返回内部使用值的日志转换值,因为这些值通常更适合基于梯度的优化。每个超级参数的规范Hyperparameter以相应内核中的实例的形式存储 。请注意,使用名称为“x”的超参数的内核必须具有self.x和self.x_bounds属性。每个超级参数的规范以相应内核中的实例的形式存储。请注意,使用名称为“x”的超参数的内核必须具有self.x和self.x_bounds属性。每个超级参数的规范以相应内核中的实例的形式存储。请注意,使用名称为“x”的超参数的内核必须具有self.x和self.x_bounds属性。

所有内核的抽象基类是Kernel。内核实现类似的接口Estimator,提供方法get_params(), set_params()clone()。这也允许通过诸如Pipeline或者之类的元估计来设置内核值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)  # Note: log-transformed
[ 0.         -0.69314718  0.69314718]
>>> print(kernel.bounds)  # Note: log-transformed
[[       -inf  2.30258509]
 [       -inf  2.30258509]
 [       -inf  2.30258509]]

 

所有的Gaussian进程内核都可以互操作,sklearn.metrics.pairwise 反之亦然:Kernel可以传递 metric对于pairwise_kernels`` 的子类的实例sklearn.metrics.pairwise。此外,使用包装类可以将来自成对的内核函数用作GP内核PairwiseKernel。唯一需要注意的是,超参数的梯度不是分析的,而是数字,所有这些内核只支持各向同性距离。该参数gamma被认为是一个超参数,可以进行优化。其他内核参数在初始化时直接设置,并保持固定。

基本内核

ConstantKernel内核可以作为一个组成部分Product ,其中它缩放其他因子(内核)的大小或作为一部分内核Sum的内核,其中它修改高斯过程的平均值。这取决于一个参数。它被定义为:

WhiteKernel内核的主要用例是作为和内核的一部分,它解释了信号的噪声分量。调整其参数对应于估计噪声水平。它被定义为:e

内核运算符

内核运算符采用一个或两个基本内核,并将它们组合成一个新的内核。该Sum内核采用两个内核K1K2 ,并通过将它们组合。该 Product内核采用两个内核K1K2 ,并通过将它们组合。该Exponentiation内核采用一个基本内核和一个标量参数 指数,并通过将它们组合 

径向基函数(RBF)内核

RBF内核是一个固定的内核。它也被称为“平方指数”内核。它由参数化参数,它可以是标量(内核的各向同性变体)或与输入X(内核的各向异性变体)具有相同数量的维度的向量。内核由以下给出:

这个内核是无限可微的,这意味着这个内核作为协方差函数的GP具有所有阶数的均方差导数,因此非常平滑。由RBF内核产生的GP的先前和后面如下图所示:

Matérn内核

Matern内核是一个固定的内核和的推广 RBF内核。它有一个额外的参数来控制所得到的函数的平滑度。它由参数化参数,它可以是标量(内核的各向同性变体)或与输入X(内核的各向异性变体)具有相同数量的维度的向量。内核由以下给出:

因为,Matérn内核收敛到RBF内核。当Matérn内核变得与绝对指数内核相同时,即,

特别是

是不是无限可微性(由RBF内核假定)的学习功能的流行选择,但至少一次()或两次可微分()。

控制学习功能的平滑度的灵活性 允许适应真正的底层功能关系的属性。由Matérn内核生成的GP的先前和后面如下图所示:

有关Matérn内核的不同变体的更多详细信息,请参见[RW2006] pp84。

理性二次内核

RationalQuadratic内核可以被看作是一个比例混合物(无限总和)RBF具有不同的特征长度尺度的内核。它通过长度尺度参数和比例混合参数进行参数化。此时  仅升支持标量的各向同性变量。内核由以下给出:

由RBF内核产生的GP的先前和后面如下图所示:

正弦平方内核

ExpSineSquared内核允许造型周期函数。它通过长度尺度参数和周期性参数进行参数化 。此时仅升支持标量的各向同性变体。内核由以下给出:

由ExpSineSquared内核产生的GP的先前和后面如下图所示:

Dot-Product内核

DotProduct内核是非平稳,并且可以从线性回归通过将获得先验上的系数和先前的上偏置。该DotProduct内核是不变的关于原点的坐标,而不是翻译的旋转。它由参数参数化。因此,内核称为均匀线性内核,否则它是不均匀的。内核是由

DotProduct内核通常与幂组合。指数2的一个例子如下图所示:

参考

  • [RW2006] 机器学习高斯过程,卡尔·爱德华·拉斯穆森和克里斯托弗·威廉姆斯KI,麻省理工学院出版社2006年链接到这本书的正式完整的PDF版本 在这里

 

传统高斯过程

在本节中,描述了在scikit学习中使用的高斯过程的实现,直到版本0.16.1。请注意,此实现已被弃用,将在版本0.18中删除。

介绍回归实例

说我们要代替这个功能。为了做到这一点,该功能被评估到一个实验设计上。然后,我们定义一个GaussianProcess模型,其回归和相关模型可以使用附加的kwargs来指定,并要求模型拟合数据。根据在实例化过程中提供的参数数量,拟合过程可以利用参数的最大似然估计,或者使用给定的参数。

>>> import numpy as np
>>> from sklearn import gaussian_process
>>> def f(x):
...     return x * np.sin(x)
>>> X = np.atleast_2d([1., 3., 5., 6., 7., 8.]).T
>>> y = f(X).ravel()
>>> x = np.atleast_2d(np.linspace(0, 10, 1000)).T
>>> gp = gaussian_process.GaussianProcess(theta0=1e-2, thetaL=1e-4, thetaU=1e-1)
>>> gp.fit(X, y)  
GaussianProcess(beta0=None, corr=<function squared_exponential at 0x...>,
        normalize=True, nugget=array(2.22...-15),
        optimizer='fmin_cobyla', random_start=1, random_state=...
        regr=<function constant at 0x...>, storage_mode='full',
        theta0=array([[ 0.01]]), thetaL=array([[ 0.0001]]),
        thetaU=array([[ 0.1]]), verbose=False)
>>> y_pred, sigma2_pred = gp.predict(x, eval_MSE=True)

 

装配噪声数据

当要拟合的数据包含噪声时,可以通过指定每个点的噪声方差来使用高斯过程模型。 GaussianProcess将参数nugget加到训练点之间的相关矩阵的对角线上:一般来说,这是一种Tikhonov正则化。在平方指数相关函数的特殊情况下,该归一化等效于指定输入中的小数方差。那是

使用nuggetcorr正确设置高斯处理可以用于从噪声数据强大地恢复底层函数。

数学公式

初始假设

假设一个人想要对计算机实验的输出进行建模,说一个数学函数:

GPML开始与假设,这个函数是一个有条件的样品路径一个高斯过程G,其另外假定如下:

其中是线性回归模型,是具有完全静态协方差函数的零均值高斯过程:

是其方差,并且是相关函数,其仅取决于每个样本之间的绝对相对距离,可能是特征(这是平稳性假设)。

从这个基本方程式可以看出,GPML只不过是一个基本的最小二乘线性回归问题的扩展:

除了我们另外假设由相关函数指定的样本之间的一些空间相干性(相关性)。实际上,普通最小二乘假设相关模型是一个时间 ,否则为零:狄拉克相关模型 - 有时在克里金文献中被称为 熔核相关模型。

最佳线性无偏预测(BLUP)

我们现在推导出基于观察条件的样本路径 的最佳线性无偏预测G

它是从其给定的属性派生的:

  • 它是线性的(观察值的线性组合)

  • 这是不偏不倚的

  • 它是最好的(在均方误差的意义上)

因此,最优权重向量是以下等式约束优化问题的解:

以拉格朗日形式重写这个受约束的优化问题,并进一步寻求要满足的一阶最优条件,一个结束于所寻求的预测器的闭合形式表达式 - 参见完整证据。

最后,BLUP被显示为具有平均值的高斯随机变量:

和方差:

我们在哪里介绍:

  • 定义相关矩阵的自相关函数及其内置参数

  • 在进行预测的点与DOE中的点之间的互相关的向量:

  • 回归矩阵(例如,Vandermonde矩阵,如果F是多项式基础):

  • 广义最小二乘回归权重:

  • 和向量:

重要的是注意到高斯过程预测器的概率响应是完全分析的,并且主要依赖于基本的线性代数运算。更准确地说,平均预测是两个简单线性组合(点积)的和,方差需要两个矩阵反转,但相关矩阵只能使用Cholesky分解算法分解一次。

经验最佳线性无偏估计(EBLUP)

到现在为止,假设给出了自相关和回归模型。然而,在实践中,它们从来不是提前知道的,所以必须为这些模型做出(积极的)经验选择相关模型

提供这些选择,应该估计BLUP中涉及的剩余未知参数。为此,人们使用一组提供的观察结合一些推理技术。基于DACE的Matlab工具箱的本实现使用最大似然估计技术 - 参见完整方程式的DACE手册。这种最大似然估计问题在自相关参数中变成全局优化问题。在本实施中,通过来自scipy.optimize的fmin_cobyla优化函数来解决这个全局优化。然而,在各向异性的情况下,我们提供了Welch的分量优化算法的实现 - 参见参考。

 

相关模型

常见的相关模型与一些着名的SVM内核相匹配,因为它们主要基于相同的假设。他们必须满足美世的条件,并应该保持固定。然而,请注意,相关模型的选择应该与观察到来的原始实验的已知特性一致。例如:

  • 如果原始实验被认为是无限可微(平滑),则应使用平方指数相关模型
  • 如果不是,那么应该使用指数相关模型
  • 还要注意,存在一个将衍生度作为输入的相关模型:这是Matern相关模型,但这里并没有实现(TODO)。

关于选择合适的相关模型的更详细的讨论,请参阅Rasmussen&Williams的参考文献。

 

回归模型

常用线性回归模型涉及零(常数),一阶和二阶多项式。但是可以以Python函数的形式指定它自己的特性,它将特征X作为输入,并返回一个包含功能集值的向量。唯一的限制是,函数的数量不能超过可用观察值的数量,因此基本的回归问题不被确定

实现细节

该实现基于DACE Matlab工具箱的翻译。

参考文献:

  • DACE,A Matlab Kriging Toolbox S Lophaven,HB Nielsen,J Sondergaard 2002,
  • WJ Welch,RJ Buck,J. Sacks,HP Wynn,TJ Mitchell和MD Morris(1992)。筛选,预测和计算机实验。Technometrics,34(1)15-25。

 

  • 无标签