[英]Sklearn Gaussian Mixture lock parameters?
我正在嘗試擬合一些高斯,其中我已經對初始參數有了一個很好的主意(在這種情況下,我正在生成分布,因此我應該總是能夠擬合這些分布)。 但是,我似乎無法弄清楚如何迫使兩個高斯人的平均值都為0。 可能嗎? m.means_ = ...
不起作用。
from sklearn import mixture
import numpy as np
import math
import matplotlib.pyplot as plt
from scipy import stats
a = np.random.normal(0, 0.2, 500)
b = np.random.normal(0, 2, 800)
obs = np.concatenate([a,b]).reshape(-1,1)
plt.hist(obs, bins = 100, normed = True, color = "lightgrey")
min_range = -8
max_range = 8
n_gaussians = 2
m = mixture.GaussianMixture(n_components = n_gaussians)
m.fit(obs)
# # Get the gaussian parameters
weights = m.weights_
means = m.means_
covars = m.covariances_
# Plot all gaussians
n_gaussians = 2
gaussian_sum = []
for i in range(n_gaussians):
mean = means[i]
sigma = math.sqrt(covars[i])
plotpoints = np.linspace(min_range,max_range, 1000)
gaussian_points = weights[i] * stats.norm.pdf(plotpoints, mean, sigma)
gaussian_points = np.array(gaussian_points)
gaussian_sum.append(gaussian_points)
plt.plot(plotpoints,
weights[i] * stats.norm.pdf(plotpoints, mean, sigma))
sum_gaussian = np.sum(gaussian_sum, axis=0)
plt.plot(plotpoints, sum_gaussian, color = "black", linestyle = "--")
plt.xlim(min_range, max_range)
plt.show()
(假設您不想強制執行 ,而是給出一個初步的猜測 。固定大小寫可能需要觸及整個代碼,然后使用整個EM方法是非常可疑的。它可能會陷入一些優化問題可通過scipy的優化模塊訪問。)
只需遵循文檔即可 。 GaussianMixture創建時受支持。
weights_init :類似數組,形狀(n_components,),可選
用戶提供的初始權重,默認為無。 如果為None,則使用init_params方法初始化權重。
means_init :類數組,形狀(n_components,n_features),可選
用戶提供的初始均值,默認為None,如果為None,則使用init_params方法初始化均值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.