首先,我们将从连续视图转向函数的离散表示:我们感兴趣的不是寻找隐式函数,而是预测具体点处的函数值,我们将其称为测试点 X。那么,我们如何从迄今为止考虑过的多元正态分布中推导出这种函数视图呢?随机过程(例如高斯过程)本质上是一组随机变量。此外,这些随机变量中的每一个都有相应的索引 i。我们将使用此索引来指代我们的 n 维多元分布的第 i 维。
现在,高斯过程的目标是从训练数据中学习这种底层分布。相对于测试数据 X,我们将训练数据表示为 Y。高斯过程的关键思想是将 X 的底层分布与 Y 一起建模为多元正态分布。这意味着联合概率分布 P_{X, Y} 跨越了我们想要预测的函数的可能函数值空间。请注意,测试和训练数据的联合分布具有 |X|+|Y| 维度。
现在我们已经了解了高斯过程的基本框架,只剩下一件事:如何建立这个分布并定义平均值 μ 和协方差矩阵 Σ ?协方差矩阵 Σ由其协方差函数 k 确定,后者通常也称为高斯过程的核。
在高斯过程中,我们将每个测试点视为一个随机变量。多元高斯分布的维数与随机变量的维数相同。由于我们想要预测 ∣X∣=N 个测试点处的函数值,因此相应的多元高斯分布也是 N 维的。使用高斯过程进行预测最终归结为从该分布中抽取样本。然后,我们将结果向量的第 i 个分量解释为与第 i 个测试点相对应的函数值。
import numpy as np
def exponential_cov(x, y, params):
return params[0] * np.exp( -0.5 * params[1] * np.subtract.outer(x, y)**2)
我们将利用多变量高斯分布的条件性质,逐点顺序生成实现。条件如下:
p(x∣y)=N(μx+ΣxyΣy−1(y−μy),Σx−ΣxyΣy−1ΣxyT)
这是实现它的函数:
def conditional(x_new, x, y, params):
B = exponential_cov(x_new, x, params)
C = exponential_cov(x, x, params)
A = exponential_cov(x_new, x_new, params)
mu = np.linalg.inv(C).dot(B.T).T.dot(y)
sigma = A - B.dot(np.linalg.inv(C).dot(B.T))
return(mu.squeeze(), sigma.squeeze())