高斯分布与高斯过程:从基础到应用
高斯分布(又称正态分布)是统计学和机器学习中最核心的概率分布之一,而高斯过程则是在此基础上构建的非参数模型,能够对函数进行概率建模。本教程将从单变量高斯分布出发,逐步深入多元高斯分布、协方差矩阵、条件概率,最后介绍高斯过程的工作原理与代码实现,帮助你系统理解这些概念及其在实际问题(如根据身高预测体重)中的应用。
一、高斯分布(单变量)
我们定义一个将输入 x 映射到输出 y 的函数 f(x)。在统计学中,我们使用随机模型来定义这种关系的概率分布。例如,一个 3.8 GPA 的学生可以获得平均 $60K 的薪水,方差(σ²)为 $10K。
p(Salary=x|GPA=3.8)(一个均值为 $60K,方差为 $10K 的高斯分布)。
概率密度函数(Probability density function, PDF)
在下面的图表中,p(X=x) 服从高斯分布:


在高斯分布中,68% 的数据在距离 μ 1σ 之内,95% 的数据在距离 μ 2σ 之内。我们可以根据概率分布进行数据采样。从分布 N(μ, σ²) 中采样数据的符号表示为:
小提示: 高斯分布的“68-95-99.7”经验法则非常实用,它告诉我们数据的大致分布范围,帮助快速评估异常值。
在现实生活中,许多数据都遵循高斯分布。例如,让我们建立旧金山居民身高和体重之间的关系模型。我们从 1000 名成年居民中收集信息,并将数据绘制如下图所示,每个红点代表 1 个人:

对应的三维概率密度函数(PDF)如下图所示:

二、多元高斯分布
让我们首先将模型推广到 多元高斯分布,即概率密度函数取决于多个变量。
一个多元向量:

多元高斯分布的概率密度函数定义如下:

其中,Σ 表示协方差矩阵:

身高与体重的例子
让我们回到身高和体重的例子中,来说明这个公式的应用。

从我们的训练数据中,我们计算得到 μ̅₁ = 190,μ̅₂ = 70:

协方差矩阵 Σ 是用来做什么的? 协方差矩阵中的每个元素都代表着两个变量之间的关系。例如,Σ₁₂ 表示身高(X₁)与体重(X₂)的相关性。如果体重随身高的增加而增加,那么 Σ₁₂ 为正值。


让我们详细介绍如何计算上述的 Σ₁₂。为了简化,我们假设我们只有两个数据点(150 磅,66 英寸)和(200 磅,72 英寸)。

在计算了所有 1000 个数据之后,协方差矩阵 Σ 的值如下所示:

协方差矩阵 Σ 中的正元素值表示两个变量呈正相关关系。不出所料,Σ₁₂ 是正值,因为体重随身高的增加而增加。如果两个变量彼此独立,则值应为 0,如下所示:

常见问题: 为什么协方差矩阵对角线元素是方差?
答:对角线上是 Σᵢᵢ,即变量自身的方差,例如 Σ₁₁ 表示身高的方差,Σ₂₂ 表示体重的方差。非对角元素才体现变量间的协方差。
计算 P(x₁ | y₁) 的概率
计算在给定 Y₁ = y₁ 的条件下 X₁ = x₁ 的概率:

其中,Φ 是累积分布函数(cumulative distribution function, CDF):

我们将协方差变量 Σ 重写为以下形式:

三、代码实现:二元高斯分布采样与可视化
我们从一个二元高斯分布中采样数据。从协方差矩阵中,我们可以看出 x 和 y 呈正相关关系,因为 Σ₁₂ 和 Σ₂₁ 是正的。
mean = [0, 2]cov = [[1, 2], [3, 1]]x, y = np.random.multivariate_normal(mean, cov, 5000).Tplt.plot(x, y, 'x')plt.axis('equal')plt.show()

下面绘制 (y, x) 的概率分布图:
from scipy.stats import multivariate_normalx, y = np.mgrid[-1:1:.01, -1:1:.01] # x (200, 200) y (200, 200)pos = np.empty(x.shape + (2,))pos[:, :, 0] = x; pos[:, :, 1] = y # pos (200, 200, 2)mean = [-0.4, -0.3]cov = [[2.1, 0.2], [0.4, 0.5]]rv = multivariate_normal(mean, cov)p = rv.pdf(pos) # (200, 200)plt.contourf(x, y, p)plt.show()

四、多元高斯分布定理(条件概率)
给定一个高斯分布:

后验条件概率 p(X₁ | X₂) 的计算公式如下所示。这个公式在后面的高斯过程中非常重要。例如,如果我们有 1000 个毕业生的 GPA 和薪水样本,我们可以使用这个定理通过 1000 个训练数据点创建一个高斯分布模型来预测给定 GPA 情况下的薪水 P(salary | GPA)。
这里不详细介绍公式的推理过程。但是假设 x 服从高斯分布。X₁ 和 X₂ 之间的相关性由 μ 和 Σ 定义。因此,给定 X₂ 的值,我们可以计算出 X₁ 的概率分布:p(X₁ | X₂)。

例如,我们知道旧金山居民的身高服从高斯分布。在下一节中,我们将应用高斯过程来预测在给定身高的情况下体重的值。
五、高斯过程(Gaussian Process, GP)
直观理解
高斯过程的直观理解很简单:如果两个点具有相似的输入,那么它们的输出也应该相似。对于有两个数据点的情况,如果一个数据点比另一个数据点更接近已知的训练数据点,那么它的预测结果会更加可靠。
例如,如果一个 GPA 为 3.5 的学生一年挣 $70K,那么另一个 GPA 为 3.45 的学生应该会挣类似的薪水。在高斯过程中,我们使用训练数据集来构建高斯分布,以进行预测。对于每个预测,我们输出一个均值和一个 σ。例如,使用高斯过程,我们可以预测一个 GPA 为 3.3 的学生可以挣到 μ = $65K, σ = $5K,而一个 GPA 为 2.5 的学生可以挣到 μ = $50K 和 σ = $15K。σ 衡量了我们预测的不确定性。因为 3.3 GPA 更接近于我们的 3.5 GPA 训练数据,所以我们对于 3.3 GPA 学生的薪水预测比 2.5 GPA 学生更有信心。
核函数与相似性矩阵 K
在高斯过程中,我们不是计算 Σ,而是计算 K 来衡量数据点 xⁱ 和 xʲ 之间的相似性。

其中,核函数 k 是一个度量两个数据点相似性的函数(值为 1 表示相同)。有许多可能的核函数,我们将使用指数平方距离作为核函数。
注意:上面的 X₁ 表示数据点的体重。x¹ 表示数据点 1。
常见问题: 如何选择合适的核函数?
答:指数平方核(RBF)是最常用的默认核,它假设函数平滑且各向同性。如果数据有周期性或趋势,可考虑周期核或线性核。实践中可通过交叉验证比较不同核的表现。
构建高斯模型
有了所有的训练数据,我们可以创建一个高斯模型:

让我们再次用两个训练数据点(150 磅,66 英寸)和(200 磅,72 英寸)来演示。这里我们正在为我们的训练数据构建一个高斯模型。

其中 175 是体重的平均值,K 衡量了数据点 x¹ 和 x² 之间身高的相似性。上面的符号表示我们可以在体重上采样一个向量 f。

从由数据点 (150, 66) 和 (200, 72) 建模的 N(μ, K) 中进行采样。
预测新数据点
现在假设我们要预测输入 x*₁, x*₂ 时的 f*₁, f*₂。模型变为:

让我们再次理解一下这是什么意思。例如,我们有一个包含 4 个人身高的向量:

我们可以使用 N(μ, K) 来采样这些人可能的体重:

我们知道前两个值来自训练数据,我们尝试计算出 f*₁ 和 f*₂ 的分布(它们的 μ 和 σ 是多少)。现在,我们不仅可以预测 2 个值,还可以对一系列输入值进行预测。

然后使用 N(μ, K) 来采样向量:

例如,我们从 N(μ, K) 中采样的第一个输出样本是:

总结
通过本教程,你从单变量高斯分布开始,逐步掌握了多元高斯分布、协方差矩阵的意义、条件概率的计算,最终理解了高斯过程的核心思想:利用训练数据构建高斯模型,通过核函数衡量数据相似性,对任意新输入输出均值与方差(即预测值与不确定性)。这种概率建模方式在回归、优化、贝叶斯机器学习等领域有广泛应用,尤其适合小样本和需要量化不确定性的场景。
