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