我试图将高斯混合模型拟合到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左右)。
有谁知道我做错了什么?
答案 0 :(得分:0)
我怀疑您使用11.8作为标准偏差或西格玛。所以相应的方差是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