GPML toolbox -- document

来源:互联网 发布:java获取11位时间轴 编辑:程序博客网 时间:2024/06/05 17:06

高斯过程(GPs)可以很方便的用于贝叶斯监督学习,例如回归 和分类。GP过程推断的最简单的形式可以通过几行代码实现。然而,在实际应用中,为了有代表性,事情会更复杂些:你可能想用更复杂的协方差和均值函数,学习好的超参数,使用非高斯似然函数(使用精确的推断是不可行的),使用近似算法,或者上面的许多或者所有的(如多个均值函数的组合))组合。这是GPMP工具包所做的事情。

第3节的其余部分首先在下一小节中介绍软件的一些基本组成部分。这可以理解第3b节描述的gp函数的用法。一个实际的例子如3c)所示,本节将在3d)中给出更详细的概述。

gp函数存在两种模式:训练或者预测。如果没有测试输入,那么函数计算:负log 边缘似然和其关于超参数的偏导数,这个模式用来调节超参数。如果给出了测试输入,那么函数返回测试集预测概率。使用方法:

   training: [nlZ dnlZ          ] = gp(hyp, inf, mean, cov, lik, x, y); prediction: [ymu ys2 fmu fs2   ] = gp(hyp, inf, mean, cov, lik, x, y, xs);         or: [ymu ys2 fmu fs2 lp] = gp(hyp, inf, mean, cov, lik, x, y, xs, ys);

4b) 基于诱导输入的稀疏近似回归
(Sparse Approximate Regression based on inducing inputs)。

当训练输入x的数量超过数百时,精确的推导花费很差时间。我们提供了稀疏近似方法来处理这些情况。基本思想是使用诱导点,然后仅基于训练,测试和诱导点之间的交叉协方差上的计算。快速的浏览所有可能的选项请参考demoSparse

使用稀疏近似方法很简单,我们仅需要将协方差函数covfunc包装进apxSparse.m中。如下面几行代码阐述的形式,调用带有推断方法infGaussLik.mgp.m

 nu = fix(n/2); u = linspace(-1.3,1.3,nu)'; covfuncF = {@apxSparse, {covfunc}, u}; inf = @(varargin) infGaussLik(varargin{:}, struct('s', 0.0)); [mF s2F] = gp(hyp, inf, meanfunc, covfuncF, likfunc, x, y, z);

在这个代码中,稀疏近似协方差函数是:apxSparse函数,一个协方差函数和一组诱导点组成。而且推断方法inf定义为infGaussLik推断方法追加上struct('s',0.0)。根据s值的不同选择不同的近似方法。s=1: 全独立训练条件(FITC),s=0: 变自由能量(VFE),0<s<1 : 稀疏平方期望传播(SPEP)。

我们定义了等距离的诱导点,在图中用黑色圈显示。注意到,预测的方差在诱导点不支持的外侧过估计了。在多元例子中,稠密的采样诱导点是不可行的,可以简单地使用训练点中的随机子集。

nu = fix(n/2); iu = randperm(n); iu = iu(1:nu); u = x(iu,:);

也可以将诱导输入作为超参数的一部分,使用字段 hyp.xu:

hyp.xu = u;

在这种情况下,超参数的最优化也会优化诱导输入(inducing inputs)(注意,到诱导输入作为超参数的一个字段给出时,那么其会覆盖通过apxSparse函数指定的有道输入。

原创粉丝点击