Sklearn Gaussian Mixture锁定参数?

时间:2017-12-20 16:25:40

标签: python scikit-learn

我试图适应一些高斯人,其中我已经对初始参数有了很好的了解(在这种情况下,我生成了分布,所以我应该总是能够适应这些)。但是,我似乎无法弄清楚如何强迫平均值例如对于两位高斯人都是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()

2 个答案:

答案 0 :(得分:0)

(假设你不想强制,但是给出一个初始猜测。固定情况可能需要触及整个代码,这是非常值得怀疑的那么整个EM方法是有用的。它可能会陷入scipy优化模块可以接近的一些优化问题。)

只需关注docs即可。它在GaussianMixture创建时得到支持。

  

weights_init :类似数组,形状(n_components,),可选

     

用户提供的初始权重,默认为无。如果为None,则使用init_params方法初始化权重。

     

means_init :类似数组,形状(n_components,n_features),可选

     

用户提供的初始方法,默认为None,如果为None,则使用init_params方法初始化。

答案 1 :(得分:0)

所以我真正知道的是 priors ,这意味着它实际上应该与public void Backward2Seconds() { if (!IsPlaying) return; videoPlayer.time = videoPlayer.time - 2; } 匹配,这允许我们设置BayesianGaussianMixture和{{ 1}}

适合

mean_prior

即便如此,也可以强迫它解决问题: enter image description here