机器学习之概率分布3

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

  接下来介绍最常用的高斯分布,对于一元变量 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_normal
import numpy as np
x=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.shape
mu = np.mean(x,axis=0)#求均值
x1=x-np.tile(mu,(N,1))
Sigma = np.matmul(x1.transpose(),x1)/N;
print(mu)
print(Sigma)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值