Python多高斯拟合 - ValueError:使用2个分量进行GMM估计,但只获得1个样本

时间:2015-12-03 13:44:25

标签: python scikit-learn curve-fitting gaussian model-fitting

我有两个高斯分布,我想要适合。由于两种分布可以不同的混合,我希望适合尽可能通用。我在这里找到了以下代码:

Gaussian fit to a histogram data in python: Trust Region v/s Levenberg Marquardt - 第一个答案。

但是,它不适用于我的数据或下面代码中生成的原始数据,并且会发出错误:

ValueError: GMM estimation with 2 components, but got only 1 samples

我希望它简单明了。我的数据只是一个二维数组,用于绘制直方图,时间与幅度。

import numpy as np
from sklearn import mixture
import matplotlib.pyplot as plt

comp0 = np.random.randn(1000) - 5 # samples of the 1st component
comp1 = np.random.randn(1000) + 5 # samples of the 2nd component

x = np.hstack((comp0, comp1)) # merge them

gmm = mixture.GMM(n_components=2) # gmm for two components
gmm.fit(x) # train it!

linspace = np.linspace(-10, 10, 1000)

fig, ax1 = plt.subplots()
ax2 = ax1.twinx()

ax1.hist(x, 100) # draw samples
ax2.plot(linspace, np.exp(gmm.score_samples(linspace)[0]), 'r') 
plt.show()

1 个答案:

答案 0 :(得分:1)

使用:

x = np.vstack((comp0, comp1))

而不是hstack

因为每行应该表示一个样本,每列都是样本的特征。