高斯分布的乘积

假设有两个高斯分布:
p 1 ( x ) = ( 2 π σ 1 2 ) − 1 2 e x p { − 1 2 ( x − μ 1 ) 2 σ 1 2 } p_1(x) = (2\pi\sigma_1^2)^{-\frac{1}{2}}exp\{ -\frac{1}{2} \frac{(x-\mu_1)^2}{\sigma_1^2} \} p1(x)=(2πσ12)21exp{21σ12(xμ1)2} p 2 ( x ) = ( 2 π σ 2 2 ) − 1 2 e x p { − 1 2 ( x − μ 2 ) 2 σ 2 2 } p_2(x) = (2\pi\sigma_2^2)^{-\frac{1}{2}}exp\{ -\frac{1}{2} \frac{(x-\mu_2)^2}{\sigma_2^2}\} p2(x)=(2πσ22)21exp{21σ22(xμ2)2}

高斯分布相乘

计算这两个高斯分布的乘积:
p 1 ( x ) p 2 ( x ) = 1 2 π σ 1 2 σ 2 2 e x p { − { ( x − μ 1 ) 2 2 σ 1 2 + ( x − μ 2 ) 2 2 σ 2 2 } } p_1(x)p_2(x) = \frac{1}{2\pi \sqrt{\sigma_1^2\sigma_2^2} }exp\{ -\{ \frac{(x-\mu_1)^2}{2\sigma_1^2} + \frac{(x-\mu_2)^2}{2\sigma_2^2} \} \} p1(x)p2(x)=2πσ12σ22 1exp{{2σ12(xμ1)2+2σ22(xμ2)2}}
高斯分布的乘积还是高斯分布,且根据这篇博客直观理解高斯相乘可以计算出 p 1 ( x ) p 2 ( x ) p_1(x)p_2(x) p1(x)p2(x)的均值 μ \mu μ和方差 σ \sigma σ
μ = μ 1 σ 2 2 + μ 2 σ 1 2 σ 1 2 + σ 2 2 \mu = \frac{\mu_1 \sigma_2^2 + \mu_2 \sigma_1^2}{ \sigma_1^2+\sigma_2^2} μ=σ12+σ22μ1σ22+μ2σ12 1 σ 2 = 1 σ 1 2 + 1 σ 2 2 \frac{1}{\sigma^2} = \frac{1}{\sigma_1^2}+\frac{1}{\sigma_2^2} σ21=σ121+σ221 σ 2 = σ 1 2 σ 2 2 σ 1 2 + σ 2 2 \sigma^2 = \frac{\sigma_1^2\sigma_2^2}{\sigma_1^2+\sigma_2^2} σ2=σ12+σ22σ12σ22
接下来分析一下 μ \mu μ σ 2 \sigma^2 σ2
首先是均值 μ \mu μ
μ − μ 1 = μ 1 σ 2 2 + μ 2 σ 1 2 σ 1 2 + σ 2 2 − μ 1 σ 1 2 + μ 1 σ 2 2 σ 1 2 + σ 2 2 = ( μ 2 − μ 1 ) σ 1 2 σ 1 2 + σ 2 2 \mu - \mu_1 =\frac{\mu_1 \sigma_2^2 + \mu_2 \sigma_1^2}{ \sigma_1^2+\sigma_2^2} -\frac{\mu_1 \sigma_1^2 + \mu_1\sigma_2^2}{\sigma_1^2+\sigma_2^2} =\frac{(\mu_2-\mu_1)\sigma_1^2}{\sigma_1^2+\sigma_2^2} μμ1=σ12+σ22μ1σ22+μ2σ12σ12+σ22μ1σ12+μ1σ22=σ12+σ22(μ2μ1)σ12 μ − μ 2 = μ 1 σ 2 2 + μ 2 σ 1 2 σ 1 2 + σ 2 2 − μ 2 σ 1 2 + μ 2 σ 2 2 σ 1 2 + σ 2 2 = ( μ 1 − μ 2 ) σ 2 2 σ 1 2 + σ 2 2 \mu - \mu_2 =\frac{\mu_1 \sigma_2^2 + \mu_2 \sigma_1^2}{ \sigma_1^2+\sigma_2^2} -\frac{\mu_2 \sigma_1^2 + \mu_2\sigma_2^2}{\sigma_1^2+\sigma_2^2} =\frac{(\mu_1-\mu_2)\sigma_2^2}{\sigma_1^2+\sigma_2^2} μμ2=σ12+σ22μ1σ22+μ2σ12σ12+σ22μ2σ12+μ2σ22=σ12+σ22(μ1μ2)σ22
μ 1 > μ 2 \mu_1>\mu_2 μ1>μ2时:
μ − μ 1 < 0 , μ − μ 2 > 0 \mu-\mu_1<0, \mu-\mu_2>0 μμ1<0,μμ2>0 所以, μ 2 < μ < μ 1 \mu_2<\mu<\mu_1 μ2<μ<μ1
μ 1 < μ 2 \mu_1<\mu_2 μ1<μ2时:
μ − μ 1 > 0 , μ − μ 2 < 0 \mu-\mu_1>0, \mu-\mu_2<0 μμ1>0,μμ2<0 所以, μ 1 < μ < μ 2 \mu_1<\mu<\mu_2 μ1<μ<μ2
μ 1 = μ 2 \mu_1=\mu_2 μ1=μ2时:
μ − μ 1 = 0 , μ − μ 2 = 0 \mu-\mu_1=0, \mu-\mu_2=0 μμ1=0,μμ2=0 所以, μ 1 = μ = μ 2 \mu_1=\mu=\mu_2 μ1=μ=μ2
可以看出 μ \mu μ是位于 μ 1 \mu_1 μ1 μ 2 \mu_2 μ2之间。

接下来是方差 σ \sigma σ
σ 2 − σ 1 2 = σ 1 2 σ 2 2 σ 1 2 + σ 2 2 − σ 1 2 = − σ 1 4 σ 1 2 + σ 2 2 < 0 \sigma^2-\sigma_1^2 = \frac{\sigma_1^2\sigma_2^2}{\sigma_1^2+\sigma_2^2}-\sigma_1^2=\frac{-\sigma_1^4}{\sigma_1^2+\sigma_2^2}<0 σ2σ12=σ12+σ22σ12σ22σ12=σ12+σ22σ14<0 σ 2 − σ 2 2 = σ 1 2 σ 2 2 σ 1 2 + σ 2 2 − σ 2 2 = − σ 2 4 σ 1 2 + σ 2 2 < 0 \sigma^2-\sigma_2^2 = \frac{\sigma_1^2\sigma_2^2}{\sigma_1^2+\sigma_2^2}-\sigma_2^2=\frac{-\sigma_2^4}{\sigma_1^2+\sigma_2^2}<0 σ2σ22=σ12+σ22σ12σ22σ22=σ12+σ22σ24<0
所以 p 1 ( x ) p 2 ( x ) p_1(x)p_2(x) p1(x)p2(x)的方差比 p 1 ( x ) p_1(x) p1(x) p 2 ( x ) p_2(x) p2(x)的方差都要小。

代码验证高斯分布相乘

紧接着,通过python代码验证这个结果:
其中,红色的曲线表示高斯分布的乘积,其详细的代码如下所示:
这里写图片描述

import matplotlib.pyplot as plt
from math import *

class Distribution:
    def __init__(self,mu,sigma,x,values,start,end):
        self.mu = mu
        self.sigma = sigma
        self.values = values
        self.x = x
        self.start = start
        self.end =end

    def normalize(self):
        s = float(sum(self.values))
        if s != 0.0:
            self.values = [i/s for i in self.values]

    def value(self, index):
        index -= self.start
        if index<0 or index >= len(self.values):
            return 0.0
        else:
            return self.values[index]

    @staticmethod
    def gaussian(mu,sigma,cut = 5.0):
        sigma2 = sigma*sigma
        extent = int(ceil(cut*sigma))
        values = []
        x_lim=[]
        for x in xrange(mu-extent,mu+extent+1):
            x_lim.append(x)
            values.append(exp((-0.5*(x-mu)*(x-mu))/sigma2))
        p1=Distribution(mu,sigma,x_lim,values,mu-extent,mu-extent+len(values))
        p1.normalize()
        return p1

if __name__=='__main__':
    p1 = Distribution.gaussian(100,10)
    plt.plot(p1.x,p1.values,"b-",linewidth=3)

    p2 = Distribution.gaussian(150,20)
    plt.plot(p2.x,p2.values,"g-",linewidth=3)

    start = min(p1.start,p2.start)
    end = max(p1.end,p2.end)
    mul_dist = []
    x_lim = []

    for index in range(start,end):
        x_lim.append(index)
        mul_dist.append(p1.value(index)*p2.value(index))
    #normalize the distribution
    s= float(sum(mul_dist))
    if s!=0.0:
        mul_dist=[i/s for i in mul_dist]

    plt.plot(x_lim,mul_dist,"r-",linewidth=3)
    plt.show()
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值