python随机生成正态分布_统计学习 | 矩阵正态分布 (matrix normal distribution)

前言:在机器学习和统计学习中,正态分布的身影无处不在,最为常见的是标准正态分布和多元正态分布 (multivariate normal distribution),两者分别作用于标量 (scalar) 和向量 (vector)。实际上,也存在一种正态分布的形式,它作用于矩阵,并广泛地应用于贝叶斯向量自回归模型 (Bayesian vector autoregression) 中。本文接下来将从大家所熟知的正态分布出发,先介绍矩阵正态分布,然后讨论矩阵正态分布在贝叶斯方法中的应用。

1 从标准正态分布到矩阵正态分布

1.1 标准正态分布

正态分布在机器学习和统计学习中随处可见,对于单一的随机变量

,其正态分布的形式为

其中,

表示均值,
表示标准差 (
表示方差)。当然,标准正态分布在我们中学时代就已经接触了。

1.2 多元正态分布

随着我们学习线性代数、概率论等相关课程,我们又认识到:若向量

服从正态分布,则存在一个多元正态分布 (multivariate normal distribution),形式为

其中,

对应着正态分布的均值,
则表示协方差矩阵。

需要说明的是,这里将多元正态分布的指数项写成矩阵迹 (trace) 的形式是为了方面后续认识矩阵正态分布,其中,在多元正态分布的写法中,

是恒成立的。

1.3 矩阵正态分布

除了作用于向量的正态分布,实际上还存在一种正态分布,它作用于矩阵,常见于贝叶斯向量自回归模型 (Bayesian vector autoregression model)。一般而言,对于随机矩阵

,若其服从矩阵正态分布,则形式为

其中,符号

来自于矩阵正态分布 (
matrix normal distribution) 英文首字母的简写,下标指代随机矩阵的大小;矩阵
,与随机矩阵
大小相同,对应于均值项;矩阵
对应于协方差矩阵。

到这里,大家可能会发现:矩阵正态分布与多元正态分布在概率密度函数形式上存在较大差异。但实际上,我们依然可以从多元正态分布的角度理解矩阵正态分布,只要将矩阵正态分布进行向量化处理便可以得到多元正态分布形式,即

这两者完全等价 (证明过程可以参考wiki),公式中的符号

表示Kronecker积 (这个运算规则可参考外积、Kronecker积和张量积一文,本文不做详述),
表示多元正态分布的协方差矩阵;符号
表示将给定矩阵按列组织成一个向量。

不过,这里有一个值得思考的问题:既然矩阵正态分布和多元正态分布可以等价,那为何还要构造出如此复杂的矩阵正态分布呢?

可能的原因要归结到协方差矩阵
上。实际上,假设我们想生成一个大小为
的随机矩阵
,并要求矩阵
在概率上服从矩阵正态分布。此时,若利用多元正态分布进行生成,则需要协方差矩阵
的大小为
,元素数量为
,显然,这个数字很惊人,毕竟存储这么大的矩阵就需要消耗计算机比较多的内存了。

因此,在很多时候,将矩阵正态分布用等价的多元正态分布替换有点不切实际。

2 贝叶斯向量自回归模型

2.1 向量自回归模型的数学表达式

在多元时间序列 (multivariate time series) 预测问题中,如果我们想借助回归模型对未来的序列进行合理估计,可采用简单的向量回归模型:

其中,

​表示​时刻的时间序列变量,是一个大小为​
的向量;​
表示大小
为​的自回归系数矩阵;向量
表示误差,常采用高斯噪声进行刻画。

一般而言,这条表达式可以被称为

​,其中,​
表示向量自回归模型的阶数。现在,假设​
,则我们需要估计的参数为
​,这些参数所包含的参数数量为​
.

为方便书写,向量自回归模型也可以写成如下形式:

其中,

是由系数矩阵构成;向量

这条公式也可以进一步写成如下形式:

其中,矩阵

;矩阵
.

2.2 构建贝叶斯模型

假设向量自回归模型中的误差项

为高斯噪声,即时间序列的观测值服从正态分布,则可以构建如下的贝叶斯向量自回归模型:

其中,符号

表示inverse Wishart分布,
表达式为

2.3 推导后验分布

构建贝叶斯模型之后,我们需要对贝叶斯模型进行后验估计,简而言之,依据贝叶斯准则(后验分布正比于似然函数和先验分布的乘积,即

),我们需要写出后验分布的具体表达式。
  • (1) 似然函数

在上述贝叶斯向量自回归模型中,似然来自于时间序列的观测值

,即

其中,指数项中的求和部分可以被改写成如下形式:

综上所述,似然函数为

.
  • (2) 先验分布

得,

得,

(3) 后验分布

依据贝叶斯准则,从

中可以推导出关于

的后验分布为

后验分布中的参数为

3 如何生成服从矩阵正态分布的随机矩阵?

现假设矩阵

服从矩阵正态分布
,若已知
,则生成随机矩阵
的原理如下:
第一步:对矩阵
作Cholesky分解,即
,分别得到矩阵

第二步:用标准正态分布生成一个大小为
的矩阵

第三步:计算
,其中,
.

在Python中,可以利用numpy写出随机矩阵

的生成函数:
def 

4 参考

[1] matrix normal distribution - Wiki

[2] slide | Bayesian Vector Autoregressions

[3] Forecasting with Bayesian Vector Autoregressions

[4] Bayesian Autoregressive Time Series Models

[5] slide | Bayesian VARs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值