【问题标题】:Sklearn GMM gives shifted gaussian peaksSklearn GMM 给出偏移的高斯峰
【发布时间】: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


【解决方案1】:

您只是将绿色高斯加到红色高斯的总和中。由于两个高斯有很多重叠,如果您希望峰值匹配,您必须不要将绿色高斯添加到红色高斯,因为红色高斯正接近其峰值。

【讨论】:

    猜你喜欢
    • 2019-02-12
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2015-02-20
    • 2014-08-02
    • 2017-11-13
    • 2017-06-14
    • 2017-04-15
    相关资源
    最近更新 更多