机器学习之概率分布3

来源:互联网 发布:炸群软件 编辑:程序博客网 时间:2024/06/07 07:17

机器学习-概率分布-高斯分布

  接下来介绍最常用的高斯分布,对于一元变量x,其高斯分布形式为:

N(x|μ,σ2)=1(2πσ2)1/2exp{(xμ)22σ2}

其中,μ表示均值,σ2表示方差。

均值为2.5方差为0.5的高斯分布

  对于D维变量x,高斯分布的形式为:

N(x|u,Σ)=1(2π)D/2|Σ|1/2exp{12(xu)TΣ1(xu)}

2维高斯分布

  高斯分布的参数估计同样也是采用最大似然估计的方法。设有N个样本服从该高斯分布 D={x1,x2,,xN}。那么对数似然函数为:

lnp(D|u,Σ)=ND2ln2πN2ln|Σ|12n=1N(xnu)TΣ1(xnu)
该对数函数对u求导数并令其为0,可得:
0u==Σ1n=1N(xnu)1Nn=1Nxn

  求Σ的过程涉及到矩阵微分生成1。这里实际上是对Σ1求导
Σ1ln|Σ|=Σ1ln|Σ1|=ΣT=Σ(xnu)TΣ1(xnu)=Tr((xnu)(xnu)TΣ1)Σ1Tr((xnu)(xnu)TΣ1)=(xnu)(xnu)T

因此,
Σ1lnp(D|u,Σ)=N2Σn=1N(xnu)(xnu)T=0Σ=1Nn=1N(xnu)(xnu)T

因此,高斯分布的最大似然估计为:
uΣ==1Nn=1Nxn1Nn=1N(xnu)(xnu)T

用python来实现上述的参数估计过程,用scipy包中的multivariate_normal分布来生成样本,再根据这些样本估计高斯分布的参数。理论推导有点繁琐,但代码实现还是非常简单。我个人的建议,我们不仅仅要知道How,更要知道Why。理论的推导实际就是在追溯Why的过程。

代码

估计高斯分布的参数:

from scipy.stats import multivariate_normalimport numpy as npx=multivariate_normal.rvs(mean=[0.3,0.5],cov=[[1,0.5],[0.5,1]],size=10000);#从均值为[0.3,0.5],方差为[[1,0.5],[0.5,1]]的二元高斯分布中生成10000个样本N,d=x.shapemu = np.mean(x,axis=0)#求均值x1=x-np.tile(mu,(N,1))Sigma = np.matmul(x1.transpose(),x1)/N;print(mu)print(Sigma)

  1. https://en.wikipedia.org/wiki/Matrix_calculus. ↩