【统计学习方法】多维高斯分布

1 基本概念

1.1 方差与协方差

协方差就是衡量两个变量相关性的变量。当协方差为正时,两个变量呈正相关关系(同增同减);当协方差为负时,两个变量呈负相关关系(一增一减)。 而协方差矩阵,只是将所有变量的协方差关系用矩阵的形式表现出来而已。通过矩阵这一工具,可以更方便地进行数学运算。

方差:Var(X) = \frac{\sum_{i}^{n} (x_i-\bar{x})(x_i-\bar{x})}{n-1}

 

协方差:Cov(X,Y) = \frac{\sum_{i}^{n}(x-\bar{x})(y-\bar{y})}{n-1}

 

1.2 协方差矩阵

根据方差的定义,给定 d 个随机变量 x_k,k=1,2,3,4... ,则这些随机变量的方差

 

Var(X) = \frac{\sum_{i}^{n} (x_{ki}-\bar{x_k})^2}{n-1}

其中,为方便书写, x_{ki} 表示随机变量 x_{k} 中的第 i 个观测样本, n 表示样本量,每个随机变量所对应的观测样本数量均为 n 。

对于这些随机变量,我们还可以根据协方差的定义,求出两两之间的协方差,即

Cov(X_k,X_m) = \frac{\sum_{i}^{n}(x_{ki}-\bar{x_{k}})(x_{mi}-\bar{x_{m}})}{n-1}

因此,协方差矩阵

\begin{bmatrix} \quad Cov(x_1,x_1) ... \quad Cov(x_1,x_d) & & & & \\ \quad.& & & & \\ \quad.& & & & \\ \quad.& & & & \\ \quad Cov(x_d,x_1) ... \quad Cov(x_d,x_d) & & & & \end{bmatrix}

1.3 一维高斯函数公式

N(x|\mu,\sigma ^2) = \frac{1}{\sqrt{2\pi\sigma^2}}e^{-\frac{(x-\mu)^2}{2\sigma^2}}

1.4 矩阵的逆

如果n阶矩阵A,如果存在n阶矩阵B,使AB = BA = E,则矩阵A成为可逆矩阵,B成为A的逆矩阵。

1.5 雅克比矩阵和雅克比行列式

在向量分析中, 雅可比矩阵是一阶偏导数以一定方式排列成的矩阵, 其行列式称为雅可比行列式

 

1.6  海森Hessian矩阵

在数学中, 海森矩阵(Hessian matrix或Hessian)是一个自变量为向量的实值函数的二阶偏导数组成的方块矩阵, 此函数如下:

 

2 高维高斯分布和公式推导

2.1 高维高斯函数

 

高维高斯函数:

N(\bar{x}|\bar{\mu},\Sigma ) = \frac{1}{(2\pi)^{\frac{D}{2}}}\frac{1}{|\Sigma|^{\frac{1}{2}}}e^{-\frac{(x-\bar{\mu})^T\Sigma^{-1}(\bar{x}-\bar{\mu})}{2}}

2.2 从一维高斯函数推导高维高斯函数

 

 

参考:

协方差矩阵

如何直观地理解「协方差矩阵」?

多维高斯分布

 

### PyTorch实现多维高斯分布 在机器学习领域,尤其是涉及概率模型的任务中,多维(多元)高斯分布在理论和实践中都占据着重要地位。对于多维情况下的高斯分布,在PyTorch中有多种方法来进行表示与操作。 #### 使用`torch.distributions.MultivariateNormal` 最直接的方式是利用内置模块 `torch.distributions.MultivariateNormal` 来创建一个多维正态随机变量对象。这允许指定均值向量以及协方差矩阵作为输入参数[^1]。 ```python import torch from torch.distributions import MultivariateNormal # 定义均值向量 (mean vector) 和 协方差矩阵 (covariance matrix) mu = torch.tensor([0., 1.]) Sigma = torch.tensor([[1., 0.5], [0.5, 2.]]) # 创建Multivariate Normal distribution实例 mvn = MultivariateNormal(loc=mu, covariance_matrix=Sigma) # 抽样得到样本点 sample = mvn.sample() print(f'Sampled value from MVN: {sample}') ``` 上述代码展示了如何基于给定的均值向量μ=[0,1]^T 及其对应的协方差Σ=[[1,.5],[.5,2]]构建一个二维的多变元高斯分布,并从中抽取了一个样本点。 #### 自定义Log Probability Function 除了使用预设好的类之外,有时也需要自定义计算log probability function 或者 likelihood ratio等更复杂的统计度量。这时可以根据具体的数学表达式手动编写相应的函数: \[ \ln p(x|\mu,\Sigma)= -\frac{D}{2}\ln(2\pi)-\frac{1}{2}(\det (\Sigma))-\frac{1}{2}(x-\mu)^{\mathrm{T}}\Sigma^{-1}(x-\mu)\] 其中\( D \)代表维度数;而其他符号含义同前文一致。 ```python def log_prob_mvnormal(x, mu, Sigma): """ 计算多维高斯分布的概率密度函数的自然对数值 参数: x : 输入张量形状为(batch_size, dim) mu : 均值向量 形状为(dim,) Sigma : 方差-协方差矩阵 形状为(dim,dim) 返回: 对应于每条记录的对数似然值组成的张量 """ batch_dim = x.size()[0] dims = float(mu.size()[0]) sign, log_det_sigma = torch.slogdet(Sigma) inv_Sigma = torch.inverse(Sigma) diff = x-mu.unsqueeze_(dim=0).expand_as(x) quad_form = torch.bmm(diff.view(-1,1,dims), torch.matmul(inv_Sigma.expand(batch_dim,-1,-1), diff.view(-1,dims,1))) return (-dims/2)*torch.log(torch.tensor(2*torch.pi))-(1./2)*(sign*log_det_sigma)+(-1./2)*quad_form.squeeze() ``` 此部分实现了针对一批次观测数据 \(X\) 的多维高斯分布的负对数似然估计器(log-probability),可用于后续优化算法中的损失函数构建。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值