【发布时间】:2017-05-20 16:43:13
【问题描述】:
我正在将两个高斯的混合拟合到一维数据(超过 1000 个点)。
似乎两个高斯和的峰值相对于直方图的峰值向左移动。我认为这是由于我的数据在 0.5 左右的截止值。
绿线和红线是两个最合适的高斯线,黑色是两个的和。这是情节:
有什么方法可以确保峰值匹配,即使右侧缺少数据点?
我正在使用:
import numpy as np
import matplotlib.pyplot as plt
from sklearn import mixture
import scipy.stats as stats
g = mixture.GaussianMixture(n_components=2,covariance_type='full')
g.fit(data)
weights = g.weights_
means = g.means_
covars = g.covariances_
num_bins = 50
n, bins, patches = plt.hist(data, num_bins, normed=True, facecolor='blue', alpha=0.2)
plt.plot(x,weights[0]*stats.norm.pdf(x,means[0],np.sqrt(covars[0])), c='red')
plt.plot(x,weights[1]*stats.norm.pdf(x,means[1],np.sqrt(covars[1])), c='green')
plt.plot(x, weights[0]*stats.norm.pdf(x,means[0],np.sqrt(covars[0])) + weights[1]*stats.norm.pdf(x,means[1],np.sqrt(covars[1])), c = 'black')
【问题讨论】:
-
也许直方图向右移动了?这是直方图相当常见的错误。
-
@Anony-Mousse 我想我可以将我的垃圾箱向左对齐,这会移动峰值,但我认为更大的问题是 GMM 不适合确保两个拟合的高斯都以数据开始和结束。例如,我的绘图上的绿色高斯可能更高更宽,向右移动更多,这将代表 -0.5 更好的凹凸
-
好吧,你的数据可能没有你想象的那么“正常”; GMM 可能在拟合方面做得不错。但是,是的,它不使用右删失分布的估计量。你需要自己的代码来做到这一点。
标签: python numpy scikit-learn cluster-analysis gmm