高斯分布相乘

一、两个高斯分布相乘的方差

两个高斯分布相乘后,新的分布的方差小于或等于原来两个分布的方差之和。这是因为两个分布相乘的最大值发生在它们的平均值处,而平均值总是比最大值小。下面是Python代码示例:

import numpy as np

def multivariate_gaussian(x, mean, covariance):
    numerator = np.exp(-0.5 * ((x-mean).T).dot(np.linalg.inv(covariance)).dot(x-mean))
    denominator = (2*np.pi)**(len(mean)/2) * np.sqrt(np.linalg.det(covariance))
    return numerator/denominator

mean1 = np.array([1,1])
mean2 = np.array([-1,-1])
covariance1 = np.array([[1,0],[0,1]])
covariance2 = np.array([[2,0],[0,2]])

def multiply_gaussians(mean1, covariance1, mean2, covariance2):
    mean3 = (covariance2.dot(np.linalg.inv(covariance1+covariance2)).dot(mean1) + covariance1.dot(np.linalg.inv(covariance1+covariance2)).dot(mean2))
    covariance3 = covariance1.dot(np.linalg.inv(covariance1+covariance2)).dot(covariance2)
    return mean3, covariance3

mean3, covariance3 = multiply_gaussians(mean1, covariance1, mean2, covariance2)

print("Mean of Gaussian 1: ", mean1)
print("Covariance of Gaussian 1: ", covariance1)
print("Mean of Gaussian 2: ", mean2)
print("Covariance of Gaussian 2: ", covariance2)
print("Mean of multiplied Gaussian: ", mean3)
print("Covariance of multiplied Gaussian: ", covariance3)

二、两个高斯分布相除

两个高斯分布相除得到的是一个新的分布。在一些情况下,比如贝叶斯推断中,需要使用两个高斯分布相除。下面是代码示例:

import numpy as np

def multivariate_gaussian(x, mean, covariance):
    numerator = np.exp(-0.5 * ((x-mean).T).dot(np.linalg.inv(covariance)).dot(x-mean))
    denominator = (2*np.pi)**(len(mean)/2) * np.sqrt(np.linalg.det(covariance))
    return numerator/denominator

mean1 = np.array([1,1])
mean2 = np.array([-1,-1])
covariance1 = np.array([[1,0],[0,1]])
covariance2 = np.array([[2,0],[0,2]])

def divide_gaussians(mean1, covariance1, mean2, covariance2):
    mean3 = mean1 - mean2
    covariance3 = covariance1 + covariance2
    return mean3, covariance3

mean3, covariance3 = divide_gaussians(mean1, covariance1, mean2, covariance2)

print("Mean of Gaussian 1: ", mean1)
print("Covariance of Gaussian 1: ", covariance1)
print("Mean of Gaussian 2: ", mean2)
print("Covariance of Gaussian 2: ", covariance2)
print("Mean of divided Gaussian: ", mean3)
print("Covariance of divided Gaussian: ", covariance3)

三、两个高斯分布相乘方差变小

两个高斯分布相乘的方差比两个高斯分布中小的方差和大的方差更小。下面是Python代码示例:

import numpy as np

def multivariate_gaussian(x, mean, covariance):
    numerator = np.exp(-0.5 * ((x-mean).T).dot(np.linalg.inv(covariance)).dot(x-mean))
    denominator = (2*np.pi)**(len(mean)/2) * np.sqrt(np.linalg.det(covariance))
    return numerator/denominator

mean1 = np.array([0,0])
mean2 = np.array([0,0])
covariance1 = np.array([[1,0],[0,2]])
covariance2 = np.array([[2,0],[0,1]])

def multiply_gaussians(mean1, covariance1, mean2, covariance2):
    mean3 = (covariance2.dot(np.linalg.inv(covariance1+covariance2)).dot(mean1) +
             covariance1.dot(np.linalg.inv(covariance1+covariance2)).dot(mean2))
    covariance3 = covariance1.dot(np.linalg.inv(covariance1+covariance2)).dot(covariance2)
    return mean3, covariance3

mean3, covariance3 = multiply_gaussians(mean1, covariance1, mean2, covariance2)

print("Mean of Gaussian 1: ", mean1)
print("Covariance of Gaussian 1: ", covariance1)
print("Mean of Gaussian 2: ", mean2)
print("Covariance of Gaussian 2: ", covariance2)
print("Mean of multiplied Gaussian: ", mean3)
print("Covariance of multiplied Gaussian: ", covariance3)

四、两个高斯分布的乘积

两个高斯分布相乘得到的是一个新的高斯分布。下面是Python代码示例:

import numpy as np

def multivariate_gaussian(x, mean, covariance):
    numerator = np.exp(-0.5 * ((x-mean).T).dot(np.linalg.inv(covariance)).dot(x-mean))
    denominator = (2*np.pi)**(len(mean)/2) * np.sqrt(np.linalg.det(covariance))
    return numerator/denominator

mean1 = np.array([1,1])
mean2 = np.array([-1,-1])
covariance1 = np.array([[1,0],[0,1]])
covariance2 = np.array([[2,0],[0,2]])

def multiply_gaussians(mean1, covariance1, mean2, covariance2):
    mean3 = (covariance2.dot(np.linalg.inv(covariance1+covariance2)).dot(mean1) +
             covariance1.dot(np.linalg.inv(covariance1+covariance2)).dot(mean2))
    covariance3 = covariance1.dot(np.linalg.inv(covariance1+covariance2)).dot(covariance2)
    return mean3, covariance3

mean3, covariance3 = multiply_gaussians(mean1, covariance1, mean2, covariance2)

def gaussian_product(x, mean1, covariance1, mean2, covariance2):
    mean3, covariance3 = multiply_gaussians(mean1, covariance1, mean2, covariance2)
    return multivariate_gaussian(x, mean3, covariance3)

x = np.array([1,-1])
p = gaussian_product(x, mean1, covariance1, mean2, covariance2)

print("Mean of Gaussian 1: ", mean1)
print("Covariance of Gaussian 1: ", covariance1)
print("Mean of Gaussian 2: ", mean2)
print("Covariance of Gaussian 2: ", covariance2)
print("Mean of multiplied Gaussian: ", mean3)
print("Covariance of multiplied Gaussian: ", covariance3)
print("Product of Gaussians: ", p)

五、两个独立正态分布相乘

两个独立正态分布相乘得到的是一个新的独立正态分布。下面是Python代码示例:

import numpy as np
import matplotlib.pyplot as plt

def normal_pdf(x, mean, variance):
    return 1/np.sqrt(2*np.pi*variance) * np.exp(-0.5 * (x-mean)**2/variance)

mean1 = 0
variance1 = 1
mean2 = 0
variance2 = 2

x = np.linspace(-10, 10, 1000)
y1 = normal_pdf(x, mean1, variance1)
y2 = normal_pdf(x, mean2, variance2)
y3 = y1 * y2

plt.plot(x, y1, label="Gaussian 1")
plt.plot(x, y2, label="Gaussian 2")
plt.plot(x, y3, label="Product of Gaussians")
plt.legend()
plt.show()

六、两个正态分布相乘公式

两个正态分布相乘得到的新的分布的均值和方差可以通过以下公式进行计算:

均值:mean3 = (covariance2*mean1 + covariance1*mean2) / (covariance1+covariance2)

方差:covariance3 = covariance1 * covariance2 / (covariance1+covariance2)

七、多维高斯分布相乘

对于多维高斯分布相乘,可以使用和二维高斯分布相乘相同的公式进行计算,只需要将均值向量和协方差矩阵扩展到多维即可。下面是Python代码示例:

import numpy as np

def multivariate_gaussian(x, mean, covariance):
    numerator = np.exp(-0.5 * ((x-mean).T).dot(np.linalg.inv(covariance)).dot(x-mean))
    denominator = (2*np.pi)**(len(mean)/2) * np.sqrt(np.linalg.det(covariance))
    return numerator/denominator

mean1 = np.array([1,2,3])
mean2 = np.array([4,5,6])
covariance1 = np.array([[1,0,0],[0,2,0],[0,0,3]])
covariance2 = np.array([[4,0,0],[0,5,0],[0,0,6]])

def multiply_gaussians(mean1, covariance1, mean2, covariance2):
    mean3 = (covariance2.dot(np.linalg.inv(covariance1+covariance2)).dot(mean1) + 
             covariance1.dot(np.linalg.inv(covariance1+covariance2)).dot(mean2))
    covariance3 = covariance1.dot(np.linalg.inv(covariance1+covariance2)).dot(covariance2)
    return mean3, covariance3

mean3, covariance3 = multiply_gaussians(mean1, covariance1, mean2, covariance2)

x = np.array([1,2,3])
p = multivariate_gaussian(x, mean3, covariance3)

print("Mean of Gaussian 1: ", mean1)
print("Covariance of Gaussian 1: ", covariance1)
print("Mean of Gaussian 2: ", mean2)
print("Covariance of Gaussian 2: ", covariance2)
print("Mean of multiplied Gaussian: ", mean3)
print("Covariance of multiplied Gaussian: ", covariance3)
print("Value of multiplied Gaussian at x: ", p)

八、高斯分布相乘还是高斯分布吗

两个高斯分布相乘得到的是一个新的高斯分布,只是均值和方差有所变化。下面是Python代码示例:

import numpy as np
import matplotlib.pyplot as plt

def multivariate_gaussian(x, mean, covariance):
    numerator = np.exp(-0.5 * ((x-mean).T).dot(np.linalg.inv(covariance)).dot(x-mean))
    denominator = (2*np.pi)**(len(mean)/2) * np.sqrt(np.linalg.det(covariance))
    return numerator/denominator

mean1 = np.array([1,1])
mean2 = np.array([-1,-1])
covariance1 = np.array([[1,0],[0,1]])
covariance2 = np.array([[2,0],[0,2]])

def multiply_gaussians(mean1, covariance1, mean2, covariance2):
    mean3 = (covariance2.dot(np.linalg.inv(covariance1+covariance2)).dot(mean1) +
             covariance1.dot(np.linalg.inv(covariance1+covariance2)).dot(mean2))
    covariance3 = covariance1.dot(np.linalg.inv(covariance1+covariance2)).dot(covariance2)
    return mean3, covariance3

mean3, covariance3 = multiply_gaussians(mean1, covariance1, mean2, covariance2)

x = np.linspace(-5, 5, 1000)
y1 = multivariate_gaussian(np.array([x,x]).T, mean1, covariance1)
y2 = multivariate_gaussian(np.array([x,x]).T, mean2, covariance2)
y3 = multivariate_gaussian(np.array([x,x]).T, mean3, covariance3)

plt.plot(x, y1, label="Gaussian 1")
plt.plot(x, y2, label="Gaussian 2")
plt.plot(x, y3, label="Product of Gaussians")
plt.legend()
plt.show()

原创文章,作者:ROBJ,如若转载,请注明出处:https://www.506064.com/n/145891.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ROBJROBJ
上一篇 2024-10-29 18:57
下一篇 2024-10-29 18:57

相关推荐

  • 详解OpenCV高斯滤波

    一、高斯滤波的介绍 OpenCV高斯滤波是一种平滑图像的处理方法,通常用于去除噪声、模糊化图像等。它的原理是利用高斯函数进行加权平均,从而减少噪声的干扰。 在图像处理中,噪声是一种…

    编程 2025-04-25
  • 高斯聚类详解

    一、什么是高斯聚类 高斯混合模型(Gaussian Mixture Model,GMM)是一种聚类算法,它将每个数据点看作是由多个高斯分布组成的混合,每个高斯分布代表了一个簇。通过…

    编程 2025-04-24
  • 高斯径向基函数

    一、高斯径向基函数参数意义 高斯径向基函数是一种常用的插值方法,通过用高斯分布函数对每个数据点进行加权实现插值。在这个过程中,高斯径向基函数有两个极其重要的参数:中心点和半径。 中…

    编程 2025-04-12
  • 随机生成符合高斯分布的数字,让你的数据更真实

    一、什么是高斯分布 高斯分布,又叫正态分布,是概率论中非常重要的一个分布。在统计学、物理学、天文学等领域都有广泛的应用。高斯分布的特点是,其随机变量的概率密度函数呈钟形曲线,且平均…

    编程 2024-12-28
  • c语言产生噪声,c语言产生高斯白噪声

    本文目录一览: 1、如何用c语言生成一个正态分布的样本 2、用C语言描述产生泊松噪声,N(numda)? 3、如何用C语言对图像加入高斯噪声和椒盐噪声? 4、急!!!请问各位高手:…

    编程 2024-12-28
  • 高斯爱学习java面试(高斯课堂java)

    本文目录一览: 1、通常java的面试都会问些什么? 2、一般java面试都会问些什么问题? 3、一般java面试都会问些什么问题 通常java的面试都会问些什么? 首先,你先向面…

    编程 2024-12-24
  • CSS高斯模糊的全方位解析

    一、CSS高斯模糊背景 背景模糊一直是许多网站和应用中常见的效果,可以让内容更加突出。高斯模糊可以让原图像变得模糊,但保留原图像的主体内容。要实现背景高斯模糊,可以使用以下代码: …

    编程 2024-12-15
  • 了解高斯滤波器

    一、高斯滤波器基础知识 def gaussian_filter(sigma, kernel_size): # 创建高斯核 kernel = np.zeros([kernel_siz…

    编程 2024-12-15
  • matlab添加高斯噪声

    一、高斯噪声介绍 高斯噪声是指在傅里叶变换下呈现高斯性质的噪声,又被称为白噪声,是自然、社会科学和其他领域中最常见的一种随机噪声。在数字信号处理中,高斯噪声是模拟信号转为数字信号时…

    编程 2024-12-12
  • 高斯赛德尔迭代法详解

    一、高斯赛德尔迭代法公式 对于线性方程组Ax=b,高斯赛德尔迭代公式如下: A=DLU // A的分解,D为A的对角线矩阵,L为下三角矩阵,U为上三角矩阵 x=(D-L)^(-1)…

    编程 2024-12-11

发表回复

登录后才能评论