【问题标题】:Mixture of Gaussian Python高斯 Python 的混合
【发布时间】:2017-04-21 11:15:02
【问题描述】:

我正在尝试将高斯混合模型拟合到 python 中的一维数组。我在 Python 中使用 Sklearn 库中的“混合”。

我的样本数组包含来自单个正态分布的 437 个样本,均值 = 70.2,方差 = 11.8,我在其中添加了一些噪声而不会丢失正常形状。

在 Python 中,我的数组,即 v,如下所示: v = 数组([ 87.37658674, 80.46544429, .... ,80.8180536])

我正在使用如下混合高斯函数来拟合样本集。

g=mixture.GaussianMixture(n_components=1) g.fit(np.array(np.split(v,v.shape[0])))

供您参考,“np.array(np.split(v,v.shape[0]))”的形状为: (437, 1)

意思是我有 437 个例子和一个维度。

拟合均值后得到正确值,但方差远大于样本方差(得到 139.61,而真实方差应该在 11.8 左右)。

有谁知道我做错了什么?

【问题讨论】:

  • 看起来您将“11.8”视为标准差而不是方差。 11.8 的平方约为 139.61。

标签: scikit-learn gaussian data-fitting mixture-model


【解决方案1】:

我怀疑您使用 11.8 作为标准差或 sigma。所以相应的方差是 sigma*sigma 或 11.8*11.8,这大约是你得到的 139.61

请看下面的代码。

import os
import numpy as np
import math
from sklearn import mixture



def main():
    np.random.seed(42)
    sigma=11.8
    mu=70.2
    obs1 = np.random.randn(437, 1) * sigma  + mu
    g = mixture.GMM(n_components=1)
    g_gmm = g.fit(obs1)

    print "%r" % g_gmm
    print "%r" % g.weights_
    print "%r" % g.means_
    print "%r" % g.covars_
    pass

【讨论】:

    猜你喜欢
    • 2012-12-20
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 2015-04-10
    • 2014-04-12
    • 2014-01-14
    • 2013-04-17
    • 2016-09-16
    相关资源
    最近更新 更多