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