簡體   English   中英

Sklearn高斯混合鎖參數?

[英]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方法初始化均值。

因此,我實際上所追求的是先驗知識 ,這意味着它實際上應該與BayesianGaussianMixture配合使用,從而允許人們設置mean_priormean_prior_precision

適合

m = mixture.BayesianGaussianMixture(n_components = n_gaussians, mean_prior = np.array([0]), mean_precision_prior = np.array([1]))

一個人甚至可以強迫它解決: 在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM