多元高斯分布:
假设
y1,y3,...,yd 分布独立,服从分布
N(0,1)
联合分布
y=(y1,y2,...,yd) 服从分布
g(y)=j=1∏d2π
1e−2(yj)2=(2π)2d1e−21yTy
期望:E(y)=0 ; 方差:Var(y)=1
做变化:
x=Ty+μ令:
∑=TTT
f(x)=g(y)∣det(T)∣−1 (det指行列式)
=(2π)2d(det∑)211e[−21(x−μ)T∑−1(x−μ)]
期望:E(x)=TE(y)+μ=μ
方差:Var(x)=Var(Ty+μ)=TV(y)TT=∑
条件高斯分布与边缘分布:
如果两组变量是联合高斯分布,那么以⼀组变量为条件,另⼀组变量同样是高斯分布。类似地,任何⼀个变量的边缘分布也是高斯分布。
x=(xbxa)
μ=(μbμa)
∑=(∑ba ∑bb∑aa ∑ab)
Λ=(∑)−1
Λ=(Λba ΛbbΛaa Λab)
条件分布是高斯分布:
p(xa∣xb)=N(xa∣μa∣b,Λaa−1)
μa∣b=μa−Λaa−1Λab(xb−μb)
边缘分布是高斯分布:
p(xa)=N(xa∣μa,(∑)aa)
极大似然估计:
L=2nlogdet(∑)−1−i=1∑n21(xi−μ)T(∑)−1(xi−μ)
多元高斯分布可视化:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import matplotlib as mpl
if __name__ == '__main__':
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False
d = np.random.randn(10000000, 2)
N = 30
density, edges = np.histogramdd(d, bins=[30, 30])
print("样本总数: ", np.sum(density))
density = density/density.max()
x = y = np.arange(N)
t = np.meshgrid(x,y)
fig = plt.figure()
ax = Axes3D(fig)
ax.scatter(t[0], t[1], density, c='r', s=15*density, marker='o', depthshade=True)
ax.plot_surface(t[0], t[1], density, cmap='rainbow', rstride=1, cstride=1, alpha=0.9, lw=1)
ax.set_xlabel("x轴")
ax.set_ylabel("y轴")
ax.set_zlabel("z轴")
plt.title("二元高斯分布")
plt.tight_layout(0.1)
plt.show()