高斯分布相乘

一、兩個高斯分布相乘的方差

兩個高斯分布相乘後,新的分布的方差小於或等於原來兩個分布的方差之和。這是因為兩個分布相乘的最大值發生在它們的平均值處,而平均值總是比最大值小。下面是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/zh-hant/n/145891.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
ROBJ的頭像ROBJ
上一篇 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

發表回復

登錄後才能評論